Изменение высоты ячейки TableView под контент

swift
tableview

#1

Как программно сделать высоту ячейки динамической? В ячейке есть два lable, текст в которые приходит с сервера.
Сразу скажу, что тему TableView и высота ячееек я видел, но так и не понял в чем у меня проблема.
Что есть:
1.

 override func viewDidLoad() {
    super.viewDidLoad()
    tableView.delegate = self
    tableView.dataSource = self
    tableView.estimatedRowHeight = 150
}
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
  return UITableViewAutomaticDimension
}
  1. Констрейнты в IB уже всякие ставил и убирал и ничего не помогло
    Картинка остается примерно такая
    32

#2

удалите в констрэйнтах height для textView (ну или для Label, если у вас через него), где текст идёт длинный, чтобы он мог растягиваться по высоте

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

там где много текста - по краям и к нижнему края привязываете констрэйнтами, НО высоту не задавайте.


#3

Констрентов по высоте нет, текст растягивается (как на картинке), но при это ячейка не тянется


#4

удалите

func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}

и вот это tableView.estimatedRowHeight = 150

потому в настройках table view cell установите Row Height 150 + констрэйнтами сделайте как выше было описано, и будет работать 100%

либо можете кинуть файл сториборда посмотреть

у вас должно быть заголовок привязан к верху, там где наушники к низу, а там где много текста - привязан к ним, но без height, а картинка по середине относительно cell


#5

Вы ошибку сделали, вы 2 раза определяете estimatedRowHeight.

нада так

tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 50

#6

https://dropmefiles.com/VKc3W Фрагмент моего сториборда. Ячейка почему-то так и не тянется, там похоже еще есть заморочка с этими параметрами

03


#7

Здесь вам вообще ничего не нужно настраивать., сделайте, как описывала выше, удалите и то и другое, потом измените настройки Row Height, потому что если и там у вас выставлено, то получается, как писал RexHunt только не 2, а три раза определяете. и ещё, чтобы было проще, время и наушники объедините в стек, чтобы разом всё привязать внизу

UPD а, стоп, там сториборд, а я на картинку туплю, минуту погодите


#8

в сториборде у вас 112 стояло в Row Height


#9

Да, 112, но это не принципиально, вопрос что ячейка не тянется


#10

Убрал, но все равно не работает. Я понимаю, что причина какая-то незначительная, но найти ее не могу)


#11

киньте в личку почту, я вышлю файл


#12

получилось что-нибудь?


#13

Пока нет, разбираюсь.


#14

Я не понимаю, что у вас не получается. Все значения высоты просто уберите со всего, где она стоит.
В ячейке обязательно лишь выставить верхние и нижние констрейнты элементов, относительно самой ячейки. В самом VC
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 50

Когда всатвляете текст в Label, можете еще вызвать такой метод у него label.sizeToFit()


#15

А проблема вот в чем. Не могу понять как быть с 2мя label, устанавливаю для одного констрейнты-все работает, но как быть со вторым? Ему же не задашь жесткие констрейнты по верху и низу относительно ячейки, иначе они будут налагаться на констрейнты первого label


#16

гляньте тут


#17

Итог: все что здесь писали правильно. НО, если есть 2 лейбла ( как у меня), которые могут менять объём текста, то решить это можно изменением Content Hugging Priority в Size Inspector, надо поставить Vertical - 250, тогда приоритет сработает и оба лейбла будут обрисовываться как надо. До конца не понимаю что значит свойство Content Hugging Priority и почему оно установлено по умолчанию Horizontal and Vertical - 251.


#18

это приоритет видимо, вы его снизили и что-то начало работать вперёд этого как надо )))