Итерировать StackView, Swift - PullRequest
       7

Итерировать StackView, Swift

1 голос
/ 16 апреля 2020

У меня есть пользовательская ячейка, составленная из 3 StackView. У каждого из них есть заголовок, описание и изображение по горизонтали. Я должен заполнить эту ячейку массивом, она может быть сделана максимум из 3 элементов, но может иметь 2 или 1. Поэтому в моей viewModel я рассматриваю этот массив следующим образом ...

let firstItem = myArray[0]
let secondItem = myArray[1]
let thirdItem = myArray[2]

И я заполняю поле firstItem.name firstItem.description ... Для каждого из них (не самый лучший подход, я думаю) Затем я проверил, существует ли индекс, если я не удаляю StackView, я установил вручную некоторые ограничения, и я подгоняю ячейку к содержимому (если у меня есть 2 элемента, ячейка короче, если у меня есть 3 элемента, ячейка больше).

Это фрагмент кода после того, как я проверил, что индекс 3 не существует:

self.stackView.removeFromSuperview()
self.ownConstraints.constant = value (20 for example)

Мой вопрос: каков наилучший подход для достижения этой цели? К ячейке я обычно добавляю элемент с циклом for один за другим, но я не знаком с этим подходом к StackView внутри ячейки.

Это то, что я сделал с ячейкой (серия ячеек с 1 название и 1 описание):

for (element) in myArray {
   self.cellArray.append( elementName , elementDescription ) 
}

1 Ответ

1 голос
/ 16 апреля 2020
// hide all items in stackView
    stackView.arrangedSubviews.forEach({ $0.isHidden = true })

    // add or update arrangedSubviews
    for (index, element) in myArray.enumerated() {
        if index >= stackView.arrangedSubviews.count - 1 {
            stackView.addArrangedSubview(UILabel())
        }
        (stackView.arrangedSubviews[index] as? UILabel)?.text = element
        stackView.arrangedSubviews[index].isHidden = false
    }

Я бы скрыл все подпредставления в stackView и показывал только подпредставления, если контент доступен в вашей viewModel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...