Многострочная метка в UIView против UITableViewCell - PullRequest
0 голосов
/ 05 мая 2018

Я создал пользовательский UITableViewCell с двумя метками и кнопкой. Он вел себя идеально, как ожидалось, и выглядел так:

Cell working

Позже я понял, что мне нужно использовать это конкретное представление в нескольких местах, одного из которых не было в TableView. Поэтому я решил удалить свою ячейку и создать вместо нее пользовательский UIView - и создать пустой пользовательский UITableViewCell, содержащий только этот пользовательский вид - ограниченный 0 во всех направлениях.

С такими же элементами и ограничениями UIView получилось так, как показано в TableView в виде ячейки:

view in cell not working

Все идентично. NumberOfLines установлен на 0, все ограничения одинаковы.

Я также заметил кое-что странное, что когда я повернул весь телефон в альбомную ориентацию, получилось так:

landscape

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

Cell working Теперь он внезапно выглядит точно так, как я хочу, чтобы он выглядел в портрете ... Мне просто пришлось перевернуть его в пейзаж и обратно в портрет ... Почему это? ..

Я поиграл с некоторыми переменными, среди которых: preferredMaxLayoutWidth, и обнаружил, что если я установлю это значение равным размеру экрана (минус 16 * 2px), оно будет выглядеть так, как ожидалось при первом запуске в портретной ориентации. Однако я не хочу устанавливать это значение. В px нет магического числа, которое будет правильным. Все дело в том, чтобы правильно установить его на все размеры экрана и ориентации. Я, вероятно, мог бы переустанавливать предпочтительную ширину каждый раз, когда layoutSubviews суперпредставления или как-то вызывается, но я решил, что должно быть решение для этого ..? Почему это работает для UITableViewCell, а не для UIView внутри a UITableViewCell?

Я перепробовал все виды sizeToFit и т. Д., И не нашел ни одного вопроса или ответа, который бы предназначался для этого конкретного различия в UIView и UITableViewCell ..

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

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

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

Итак, просто добавьте все ваши представления в стек и установите верхний, нижний, ведущий и конечный ограничения UIStackView относительно UIView xib как:

enter image description here

0 голосов
/ 05 мая 2018

Проблема здесь немного сложная, но я попытаюсь объяснить ее ... Когда представление отображается, оно сначала делает это независимо от своего контейнера, а затем сообщает системе свою высоту, когда системе необходимо определить высоту. ячейки, что происходит за до ячейки. Как только ячейка существует и устройство поворачивается, представление «понимает», что оно находится в ячейке, ограничивает себя и соответствующим образом сообщает о своей высоте.

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

Самое простое решение - поместить метки и кнопку обратно прямо в ячейку. Другой вариант может заключаться в том, чтобы сделать ваше внешнее представление ячейкой табличного представления. Вы можете создать экземпляр ячейки табличного представления за пределами табличного представления для того места, в котором он необходим. Другой вариант - реализовать табличный просмотр делегата табличного представления: heightForRowAtIndexPath: метод и определить размер вручную.

...