Реализуйте гибкий пользовательский интерфейс с помощью UITableView.

Вы когда-нибудь реализовывали некоторые экраны, как показано ниже?

Что вы делаете с таким интерфейсом?
Мое решение может быть хорошей практикой для пользовательских интерфейсов, у которых есть некоторые моменты:

  • Длинный экран (с возможностью прокрутки)
  • Форма (прокручивается при включенной/выключенной клавиатуре)
  • Нужно добавлять/удалять элементы во время выполнения

Мы делим все на множество UITableViewCell. И в cellForRows:atIndexPath мы возвращаем ячейки.
Например:

Мы разделим этот экран на разные части.

  • Ячейка заголовка: метка заголовка и подзаголовка
  • Ячейка электронной почты
  • Ячейка пароля
  • Имя ячейки
  • Гендерная ячейка
  • Кнопочная ячейка

у меня есть класс knStaticListController заворачивать обычные вещи.

Я использую автоматический макет программно с моим собственным расширением KNConstraints. Вы можете проверить мой пост об автоматическом макете программно здесь и выбрать другой способ использования автоматического макета по коду с этим постом.

Все эти файлы добавляются в стартовый проект. Скачать здесь

В этой демонстрации я просто рассказываю вам, как использовать этот способ, вместо того, чтобы создавать хороший пользовательский интерфейс.

1. Сделайте заголовок ячейки


  func makeTitleCell() -> knTableCell {
        let titleLabel = UIMaker.makeLabel(text: "Golf App",
                                           font: UIFont.boldSystemFont(ofSize: 22),
                                           color: .white,
                                           numberOfLines: 0,
                                           alignment: .center)
        return knTableCell.wrap(view: titleLabel,
                                space: UIEdgeInsets(top: 16, left: 16, bottom: 44, right: 16))
    }

makeLabel мой быстрый способ создать UILabel с форматом. Вы можете проверить другую функцию для создания популярных элементов управления в UIMaker.

knTableCell.wrap: встроить вид в UIView.

Вы должны установить 4 стороны (верхняя, левая, нижняя, правая) UILabel. Так что размер ячейки может автоматически изменяться в зависимости от UILabel. Или вы можете установить для ячейки фиксированную высоту (например, 82 пикселя).

Помните, что нижний интервал составляет 44 пикселя, я объясню вам в следующей части.

ОЧЕНЬ ВАЖНОЕ ПРИМЕЧАНИЕ

Вы должны убедиться, что каждая ячейка может изменять размер автоматически. В противном случае ваш макет может быть нарушен в этой ячейке.

2. Сделать ячейку текстового поля


  func makeTextFieldCell(placeholder: String) -> knTableCell {
        let textField = UIMaker.makeTextField(placeholder: placeholder,
                                              font: UIFont.systemFont(ofSize: 14),
                                              color: .white,
                                              alignment: .left)
        textField.backgroundColor = UIColor.black.withAlphaComponent(0.5)
        textField.height(48)
        return knTableCell.wrap(view: textField,
                                space: UIEdgeInsets(left: 16, bottom: 16, right: 16))
    }

Вы можете сделать гибкую функцию для повторного использования для ячейки электронной почты, ячейки пароля, ячейки имени.

Я использую фиксированную высоту для ячейки текстового поля. Убедитесь, что каждая ячейка может вычислить свой размер.

Эта ячейка имеет верхний интервал 0px, а нижний интервал 16px. Почему?

Поскольку ячейка заголовка имеет нижний интервал 44 пикселя. Если я добавлю 16 пикселей вверху к ячейке текстового поля, расстояние между текстовым полем заголовка и имени составит 60 пикселей. И я хочу увеличить/уменьшить интервал, какой из них я должен изменить? Запутаешься за тот и в следующем году, когда захочешь поменять интервал, не помнишь где менять.

ПРИМЕЧАНИЕ

Установите только вертикальный интервал внизу для всех пользовательских интерфейсов, всех проектов.

3. Добавьте ячейки в UITableView


  override func setupView() {
        tableView.backgroundColor = UIColor.green.withAlphaComponent(0.8)
        view.addSubviews(views: tableView)
        tableView.fill(toView: view)
        
        datasource = [
            makeTitleCell(),
            makeTextFieldCell(placeholder: "Email"),
            makeTextFieldCell(placeholder: "Password")
        ]
    }

Запустите и посмотрите, как это работает. Моя обертка сделает все за вас, вам больше не нужно об этом заботиться.

Пользовательский интерфейс не великолепен, поэтому я не хочу показывать здесь 😄

Реализовать UI очень интересно. Выбор хорошего решения может помочь вам сэкономить время и усилия. Поделитесь со мной своими решениями.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *