Подтвердить что ты не робот

UITableView автоматически изменяет размер строки, нарушающей таинственность на iPhone 6Plus

У меня есть пользовательский UITableViewCell, у которого есть эскиз и куча текста. Высота строки настраивается автоматически, используя

tableView.estimatedRowHeight = 129;
tableView.rowHeight = UITableViewAutomaticDimension

Высота строки должна быть рассчитана как точно 138. На iPhone 5 все отлично смотрится. Однако на iPhone 6 Plus высота автоматического ряда не срабатывает для случайных строк со следующим журналом.

(
    "<NSLayoutConstraint:0x17009ddd0 V:|-(20)-[scoop.ThumbnailImage:0x124d2a5a0]   (Names: '|':UITableViewCellContentView:0x124e23200 )>",
    "<NSLayoutConstraint:0x17009de70 UITableViewCellContentView:0x124e23200.bottomMargin == scoop.ThumbnailImage:0x124d2a5a0.bottom + 20>",
    "<NSLayoutConstraint:0x17009e780 V:[scoop.ThumbnailImage:0x124d2a5a0(90)]>",
    "<NSLayoutConstraint:0x17009ef00 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x124e23200(138.333)]>"
)

Последняя строка журнала, по-видимому, говорит, что по какой-то причине высота строки была рассчитана как 138.333 вместо 138. Я уже немного стучал головой, но я не могу понять, почему это происходит. Может кто-нибудь помочь?

Обновление: Вот как выглядит моя ячейка просмотра таблицы.

cell

ОБНОВЛЕНИЕ Я не смог получить код из основного репо, так как он является частью более крупного проекта. Но мне удалось воспроизвести проблему с помощью очень простого разумного проекта. Пожалуйста, найдите здесь в github.

4b9b3361

Ответ 1

Это предупреждение говорит вам о конфликте в ваших ограничениях. Уменьшите приоритет ограничения высоты до 999, и он исчезнет. Протестировал его в своем проекте Github и отлично работал.

enter image description here

Ответ 2

0.333 на 3-кратном дисплее (который iPhone 6+), вероятно, связан с разделителем ячеек.

Обратите внимание, что ваши ограничения не устанавливают размер ячейки, они устанавливают размер contentView. Но ячейка должна добавить 2 пикселя (= 0,666 точек) к высоте ячейки для разделителя ячеек. Autolayout пытается сохранить позиции позиций на целых границах, поэтому добавление 0,666 точек к высоте ячейки может привести к добавлению 0,333 к вашей высоте содержимого.

Вы можете избежать ошибки, установив разделители таблиц на None. Хотя настройка одного из приоритетов на 999 (обычно нижний приоритет), поскольку другой ответ предложил, является хорошим решением в целом.

Ответ 3

Предупреждение сообщает вам, в чем проблема, но вы не можете этого понять. Первые три ограничения предназначены для изображения высотой 90 пикселей, которое на 20 пикселей ниже вершины его контейнера, и на 20 пикселей выше его нижнего края контейнера. Это 130 и несовместимо с четвертым ограничением, которое требует общей высоты 138. Однако, поскольку ограничение нижнего края относительно поля контейнера добавляет определенное количество пикселей больше. Удалите общее ограничение по высоте (моя рекомендация) или измените количество верхнего и нижнего края.