У меня есть ячейка tableView с различным контентом (представления, метки, изображения) в одной ячейке. Но в чем-то содержимое клеток может быть не полным. Как я могу использовать изменение размеров ячеек без удаления и добавления всегда ограничений? Благодарю.Как получить изменение таблицы tableView с различным содержимым без удаления ограничений в iOS
ответ
Одним из возможных решений этой проблемы:
- Добавить ограничения для скрытого состояния с приоритетом 1000
- Добавить дополнительные ограничения для измененного состояния с более низким приоритетом (бывшие 750)
- Сохранить ограничения, является ТОЛЬКО для скрытого состояния в
IBOutlet
- Сохранение ограничений, которые ТОЛЬКО для изменения состояния в другомКоллекция
Код:
@IBOutlet var hiddenConstraints: [NSLayoutConstraint] = []
@IBOutlet var visibleConstraints: [NSLayoutConstraint] = []
func hide(_ hide: Bool) {
for hiddenConstraint in self.hiddenConstraints {
hiddenConstraint.isActive = hide
}
for visibleConstraint in self.visibleConstraints {
visibleConstraint.isActive = !hide
}
self.layoutIfNeeded()
}
Существует быстрее решение:
-
содержание
- Move, которые могут быть скрыты в поле зрения контейнера
- высота Установить ограничение для просмотра контейнера
- Изменение от константы ограничения длины кода до 0, если она скрыта или до нужной высоты, если она видна
Код:
@IBOutlet var heightConstraint: NSLayoutConstraint!
func hide(_ hide: Bool) {
self. heightConstraint.constant = hide ? 0 : 150 //Estimated height
self.layoutIfNeeded()
}
Это не хороший подход, так как это приведет к ограничению аварий во время выполнения. Поэтому я предпочитаю использовать первый.
Также вам нужно будет обновить свою ячейку из таблицы, чтобы переместить другие ячейки вверх или вниз.
спасибо, хорошо сработал –
Ray Wenderlich имеет фантастический учебник по динамической калибровки ячеек таблицы, которые можно найти здесь: https://www.raywenderlich.com/129059/self-sizing-table-view-cells
TL; DR Вы должны убедиться, что содержимое вашей ячейки возлагали на всех четырех сторонах для представления содержимого ячейки, а также для установки в качестве приоритетного вертикального обнимания, превышающего или равного ограничению по высоте на вашей метке.
Проблема в том, что представления имеют два состояния: скрыть, а не скрывать. И когда он не скрыт, он имеет высоту и все ограничения, а ячейка не может быть меньше. –
Когда вы говорите «скрыть», я предполагаю, что вы устанавливаете свойство 'hidden'? Попробуйте добавить выход для ограничения высоты вместо этого и установить его на 0, чтобы скрыть, тогда ячейка изменит размер, как ожидалось. –
Опять работа с ограничениями. У Else view есть верхние и нижние ограничения, как вы говорите - мне еще нужно сделать выходы по этим элементам и установить 0 –
вот что-то, что может вам помочь - http://stackoverflow.com/questions/18065938/how-to-use-auto-layout-to-move-other-views-when-a-view-is-hidden –
Я проверяю это, вот работа с ограничениями, но у меня очень много элементов, и это может быть очень много кода для этого. –