Автопрокладка игнорируется в Custom UITableViewCell

93

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

Вот скриншот результата и ограничений в раскадровке. введите описание изображения здесь

введите описание изображения здесь

В VC, который содержит tableView, вот код в viewDidLoad:

tableView.estimatedRowHeight = 120.0
tableView.rowHeight = UITableViewAutomaticDimension

Закомментировав вторую строку, вы получите ячейки с высотой 120,0, но также игнорируется автоматическая раскладка.

Благодарность


Обновить

Чтобы упростить интерфейс, я оставил одну метку с ограничениями:

  • Ведущее пространство для супервизора
  • Верхнее пространство для просмотра
  • Фиксированная ширина и высота (100 и 100)
  • Нижнее пространство до края контейнера, чтобы убедиться, что ячейка имеет все вертикальные ограничения для определения ее высоты

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

В Инспекторе размеров высота строки установлена ​​на 120 и отмечен флажок «Пользовательский». Ячейка имеет правильный настраиваемый класс, идентификатор повторного использования ячейки правильный.


Обновление: найдено решение

Это была простая ошибка, см. Мой ответ ниже.

Kqtr
источник
Проверьте свой отладочный терминал - есть ли там журналы NSLayoutConstraint, предполагающие, что что-то работает не так, как ожидалось?
Мэтью Халлатт
В отладочном терминале @MatthewHallatt ничего не отображается, спасибо.
Kqtr
@Kqtr попробуйте прокомментировать эти две строки, а затем запустить его в обычном режиме, чтобы проверить, есть ли какие-либо изменения?
Тушар Шарма
@TusharSharma Комментирование двух строк имеет тот же эффект, что и комментирование только строки rowHeight: высота ячейки составляет 120,0, но автоматическая компоновка не работает.
Kqtr
1
Отображает ли построитель интерфейса какие-либо ограничения как отсутствующие или неоднозначные? Проверьте маленький желтый или красный восклицательный знак.
Мэтью Халлатт

Ответы:

250

Автоматическая компоновка была проигнорирована, потому что как ячейке прототипа, так и UIView ячейки был задан пользовательский класс ячейки в IB.

Установка UIView обратно в класс UIView решила проблему.

просто чтобы быть предельно ясным

Kqtr
источник
2
Я застрял в этой проблеме на несколько часов, и это решает ее, спасибо!
Candidev
я потратил впустую почти весь день, пока не пришел сюда .... Тысяча спасибо тебе.
Renascent,
-3

Я думаю, проблема в том, что вы реализуете:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: 
IndexPath) -> CGFloat {

 return x
}

Вам необходимо удалить эту функцию, чтобы tableview вычислял ее автоматическую высоту для ячеек.

Джаафар Барек
источник
Спасибо, я, к сожалению, не отменяю его: на самом деле у меня даже нет делегата для этого tableView, только источник данных.
Kqtr
Вы установили ограничения textview для всех краев ячейки? А прокрутку textView вы отключили?
Джаафар Барек
Многострочная метка (0 строк) имеет ограничения на 1) вертикальный интервал с номером слева 2) верхнее пространство до супервизора 3) конечное пространство до супервизора и 4) нижнее пространство с меткой Спрошено.
Kqtr