2013-05-21 2 views
5

У меня есть табличный вид с кучей ячеек (пользовательская ячейка, которая имеет только контент).iOS Auto-Layout: динамическая высота для ячейки вида таблицы

В tableView:cellForRowAtIndexPath: Я добавляю предопределенный UIView (который имеет несколько подвид) к представлению содержимого пользовательской ячейки. Я установил все ограничения для UIView и его subviews раньше.

Последнее, но не менее важное: я установил вертикальные и горизонтальные ограничения для представления содержимого моей пользовательской ячейки (супервизора) и UIView, которая была добавлена ​​до (subview).

Струны ограничений выглядеть следующим образом:

H:|[view]| 
    V:|[view]| 

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

+1

Нет, вы должны реализовать 'Tableview: heightForRowAtIndexPath' и возврата будет использоваться высота или высота по умолчанию ячейки. –

+0

Есть ли способ дать представление решить, какую высоту он должен получить? – Chrizzor

+1

Если вы используете пользовательский 'UITableViewCells', вы можете создать метод в подклассе, который возвращает высоту для этой ячейки, а затем вызвать этот метод в' tableView: heightForRowAtIndexPath'. Очевидно, постарайтесь сделать расчет быстрым и эффективным (возможно, предварительно вычислить результат при любом изменении и кешировать результат, если расчет очень сложный). –

ответ

0

Я решил проблему, используя CGSize size = [view systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]; в tableView:heightForRowAtIndexPath:.

1

Автоматическая компоновка не поможет с высотой ячейки. Вы должны установить это в tableView:heightForRowAtIndexPath. Наверное, вы, вероятно, спрашиваете об этом, потому что высота вашей ячейки является переменной, а не фиксированной. то есть они зависят от содержимого.

Чтобы решить это, предварительно вычислите высоты ячеек и сохраните их в массиве. Возвратите значение для соответствующего indexPath в методе tableView:heightForRowAtIndexPath.

Не забудьте рассчитать размеры контента на основной нити, используя sizeThatFits из UILabel классы и т. Д.

Если ваш расчет интенсивный, делайте большую часть его с main отдельно от вида связанных методов, таких как sizeThatFits.

4

Проверьте мой развернутый ответ на этот вопрос здесь: https://stackoverflow.com/a/18746930/796419

Это занимает немного работы, чтобы установить, но вы можете абсолютно быть Автокомпоновка ограничения движения полностью динамическое представления таблицы без единой закодированной высоты (и пусть решатель ограничений сделает тяжелый подъем и предоставит вам высоту строки).

0

Чтобы установить автоматические размеры для высоты строки, выполните следующие шаги, чтобы сделать автоматическое измерение эффективным для раскладки высоты ячеек/строк.

  • Присвоить и осуществлять DataSource и делегат
  • Присвоить UITableViewAutomaticDimension к RowHeight & estimatedRowHeight
  • Реализация делегата/методы DataSource (т.е.heightForRowAt и возвращает значение UITableViewAutomaticDimension к нему)

-

@IBOutlet weak var table: UITableView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Don't forget to set dataSource and delegate for table 
    table.dataSource = self 
    table.delegate = self 

    // Set automatic dimensions for row height 
    table.rowHeight = UITableViewAutomaticDimension 
    table.estimatedRowHeight = UITableViewAutomaticDimension 
} 



// UITableViewAutomaticDimension calculates height of label contents/text 
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
    return UITableViewAutomaticDimension 
} 

, например этикетки в UITableViewCell

  • Установить количество строк = 0 (режим разрыва & линия = укоротить хвост)
  • Задайте все ограничения (сверху, снизу, справа налево) относительно контейнера супервизора/ячейки.
  • Дополнительно: Установите минимальную высоту для этикетки, если вы хотите минимальную вертикальную область, покрытую меткой, даже если данных нет.

enter image description here

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

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