2016-11-10 4 views
1

У меня есть ячейка tableView с различным контентом (представления, метки, изображения) в одной ячейке. Но в чем-то содержимое клеток может быть не полным. Как я могу использовать изменение размеров ячеек без удаления и добавления всегда ограничений? Благодарю.Как получить изменение таблицы tableView с различным содержимым без удаления ограничений в iOS

illustration of the problem

+0

вот что-то, что может вам помочь - http://stackoverflow.com/questions/18065938/how-to-use-auto-layout-to-move-other-views-when-a-view-is-hidden –

+0

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

ответ

0

Одним из возможных решений этой проблемы:

  1. Добавить ограничения для скрытого состояния с приоритетом 1000
  2. Добавить дополнительные ограничения для измененного состояния с более низким приоритетом (бывшие 750)
  3. Сохранить ограничения, является ТОЛЬКО для скрытого состояния в IBOutlet
  4. Сохранение ограничений, которые ТОЛЬКО для изменения состояния в другомКоллекция

Код:

@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() 
} 

Существует быстрее решение:

    содержание
  1. Move, которые могут быть скрыты в поле зрения контейнера
  2. высота Установить ограничение для просмотра контейнера
  3. Изменение от константы ограничения длины кода до 0, если она скрыта или до нужной высоты, если она видна

Код:

@IBOutlet var heightConstraint: NSLayoutConstraint! 

func hide(_ hide: Bool) { 

    self. heightConstraint.constant = hide ? 0 : 150 //Estimated height 

    self.layoutIfNeeded() 
} 

Это не хороший подход, так как это приведет к ограничению аварий во время выполнения. Поэтому я предпочитаю использовать первый.

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

+0

спасибо, хорошо сработал –

0

Ray Wenderlich имеет фантастический учебник по динамической калибровки ячеек таблицы, которые можно найти здесь: https://www.raywenderlich.com/129059/self-sizing-table-view-cells

TL; DR Вы должны убедиться, что содержимое вашей ячейки возлагали на всех четырех сторонах для представления содержимого ячейки, а также для установки в качестве приоритетного вертикального обнимания, превышающего или равного ограничению по высоте на вашей метке.

+0

Проблема в том, что представления имеют два состояния: скрыть, а не скрывать. И когда он не скрыт, он имеет высоту и все ограничения, а ячейка не может быть меньше. –

+0

Когда вы говорите «скрыть», я предполагаю, что вы устанавливаете свойство 'hidden'? Попробуйте добавить выход для ограничения высоты вместо этого и установить его на 0, чтобы скрыть, тогда ячейка изменит размер, как ожидалось. –

+0

Опять работа с ограничениями. У Else view есть верхние и нижние ограничения, как вы говорите - мне еще нужно сделать выходы по этим элементам и установить 0 –

 Смежные вопросы

  • Нет связанных вопросов^_^