Изменяемые макеты iOS LayoutKit - PullRequest
0 голосов
/ 27 октября 2018

Я недавно играл с LayoutKit , и хотя фреймворк чистый и достаточно мощный, я изо всех сил пытаюсь найти правильный шаблон для реализации изменяемых компонентов пользовательского интерфейса (например, метки, которая отслеживает прямую трансляцию).Как рассчитывать на комментарий пользователя).Вот два моих вопроса, которые действительно сводятся к одному и тому же фундаментальному принципу - как я могу обновить пользовательский интерфейс, созданный LayoutKit?

Конкретно ...

Сценарий 1:

Каков рекомендуемый способ получить в свои руки UIView экземпляры, сгенерированные экземпляром Layout?

В примере "Hello World" , указанном на сайте , скажите, что я хочуизменить изображение, отображаемое UIImage.Единственный способ сделать это - сохранить ссылку на него из закрытия config (<<<<< == мои правки): </p>

var myImageView: UIImageView? = nil   // <<<<<

let image = SizeLayout<UIImageView>(width: 50, height: 50, config: { imageView in
    imageView.image = UIImage(named: "earth.jpg")

    myImageView = imageView           // <<<<<
})

let label = LabelLayout(text: "Hello World!", alignment: .center)

let stack = StackLayout(
    axis: .horizontal,
    spacing: 4,
    sublayouts: [image, label])

let insets = UIEdgeInsets(top: 4, left: 4, bottom: 4, right: 8)
let helloWorld = InsetLayout(insets: insets, sublayout: stack)
helloWorld.arrangement().makeViews(in: rootView)

myImageView.image = UIImage(named: "someOtherImage.jpg")   // <<<<<

Однако такой подход сопряжен с трудностями.в некоторых сценариях и вообще клунки.Чего мне не хватает?

Сценарий 2:

Скажи, что я хочу изменить ярлык, встроенный глубоко в какой-то макет, с того, чтобы сказать «что-то короткое» на «что-то очень-очень длинное, которое требует пересчетамакет ".

Два подхода к этой проблеме, о которых я могу подумать:

  1. Воссоздать макет с обновленной информацией и воссоздать все дерево пользовательского интерфейса.Это, однако, похоже на сумасшедшую дорогостоящую операцию только для обновления текста метки.
  2. Создайте заново макет, используя соответствующие viewReuseId s, и пройдите анимацию, но вместо этого немедленно примените изменения:

.

// Apply the initial layout.
before.arrangement(width: 350, height: 250).makeViews(in: rootView)

// Prepare the animation to the final layout.
after.arrangement(width: 350, height: 250).prepareAnimation(for: rootView, direction: .rightToLeft).apply()

Это также выглядит как сумасшедший дорогой способ просто изменить значение метки.Опять же, чего мне не хватает?Можно ли использовать LayoutKit только для неизменных интерфейсов?

...