UITableViewCell не меняет высоту, когда некоторые подпредставления UIStackView не скрыты - PullRequest
0 голосов
/ 21 сентября 2018

Как видно из названия, у меня есть пользовательский UITableCell, в котором у меня есть несколько UIStackViews.Каждый из этих стеков содержит много подпредставлений, но я просто хочу показать три из них, когда ячейка отображается в первый раз.Если пользователь хочет видеть больше, есть кнопка [+], которая вызывает метод, который добавляет оставшиеся.

Пользовательская высота ячейки определяется с помощью UITableViewAutomaticDimension, и она отлично работает для первого отображения ячейки, ноКогда я пытаюсь добавить и удалить подпредставления в стеке, существуют представления, которые не следует изменять, которые теряют свои ограничения, а те, которые должны отображаться, в некоторых случаях этого не делают.Я хотел бы показать все метки UILabel и высоту обновляемой ячейки.

Метод, который вызывается при нажатии кнопки [+], следующий:

@objc private func changeImage(sender: UIButton) {

    let index = (Int(sender.accessibilityValue!)!)
    let open : Bool = openItem[index]
    let plateStack : UIStackView = plateStacks[index]
    let plates : [UILabel] = platesViews[index]

    if !open {
       sender.setImage(UIImage(named: "less")?.withRenderingMode(.alwaysTemplate), for: .normal)
       let nPlatesToAdd = max(platesViews[index].count - 3, 0)
       for i in 0..<nPlatesToAdd {
            let plate = plates[i + 3]
            plateStack.addArrangedSubview(plate)
            plate.leadingAnchor.constraint(equalTo: plateStack.leadingAnchor, constant: 0).isActive = true
            plate.trailingAnchor.constraint(equalTo: plateStack.trailingAnchor, constant: 0).isActive = true
        }
    }
    else {
        sender.setImage(UIImage(named: "more")?.withRenderingMode(.alwaysTemplate), for: .normal)
        var i = plateStack.arrangedSubviews.count - 1
        while i > 2 {
            let view = plateStack.arrangedSubviews[i]
            plateStack.removeArrangedSubview(view)
            view.removeFromSuperview()
            i = i - 1
        }
    }
        openItem[index] = !open
}

Первое отображение ячейки (все в порядке) и после нажатия на кнопку [+]:

enter image description here

1 Ответ

0 голосов
/ 21 сентября 2018

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

  • убедитесь, что ограничение stackView правильно установлено на contentView
  • Распределение stackView должно быть fill
  • Послевы изменяете что-то, что влияет на высоту tableView, вы можете использовать этот код для обновления высоты ячейки без перезагрузки таблицы:

    tableView.beginUpdates()tableView.endUpdates()

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