TableView и высота ячееек


#1

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

  1. Почему указывая высоту строки в сторибоард не помогает? А вот если хардкодом пропишу, высота ячейки меняется.
        override func viewDidLoad() {
        super.viewDidLoad()
        
        tableView.delegate = self
        tableView.dataSource = self
        tableView.rowHeight = 150
    }
  1. Как можно указать, что высота строк динамическая и зависит от контекста. Пробовал, но не помогает.
        tableView.estimatedRowHeight = 90
        tableView.rowHeight = UITableViewAutomaticDimension

Исходный код


#2

Используйте функцию heightForRowAt

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 150
}

Это позволит задавать необходимую высоту. Если прописать сюда условия для разных вариантов (например, через switch) - высоту можно будет делать динамической


#3

Получается мне нужно для каждой строки считать этот размер вручную? У меня список из десятков строк и каждая может иметь разную высоту, не вручную же прописывать?


#4

Нет.
Лучше объясните, от чего зависит высота.


#5

Например, количество параметров пришедших с сервера. В виде ключ - значение.
В ячейке есть лого, стеквьюв. В стек программно добавляются лейблы. Количество таких лейблов и длина текста может быть разная.


#6

Я понял.

Попробуйте вот так:

func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

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

Не помогло.


#8

посмотрите чтоб у вас элементы внутри таблицы имели привязку как к верхней части ячейки так и к нижней!


#9

На это сообщение поступили жалобы от участников сообщества, поэтому оно временно скрыто.


#10

Уважаемый пакетик, проект хкоде еще в первом сообщении приложил.


#11

На это сообщение поступили жалобы от участников сообщества, поэтому оно временно скрыто.


#12

положил в яндекс проект


#13

Ну так а что, ещё не заработало?
Там же все просто!
Чтоб высота ячейки могла считаться автоматически нужно

  • подписаться на делегат
  • переопределяться метод естимейтХейтОфРоу
    -указать примерную высоту ячейки

В ячейке проверить чтоб констрейны елементов по высоте были привязаны к верхнему и нижнему краю ячейки
И все!


#14

Я вчера еще не успел опробовать. Отпишусь.


#15

На это сообщение поступили жалобы от участников сообщества, поэтому оно временно скрыто.


#16

Спасибо. Буду изучать.


#17

Один вопрос в ViewController

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
override func viewDidLoad() {`
super.viewDidLoad()

self.tableView.estimatedRowHeight = 150.0;
  }

я нигде не вижу указание делегата таблице вроде этого. Но при этом работает. Где это установлено?

 self.tableView.delegate = self
 self.tableView.dataSource = self

#18

На это сообщение поступили жалобы от участников сообщества, поэтому оно временно скрыто.