UIView-Encapsulated-Layout-Width/Height с ограничениями до нуля

Существует несколько вопросов о переполнении стека об авто-макете ячеек UITableView и заголовках/нижних колонтитулах разделов, относящихся к ограничениям UIView-Encapsulated-Layout-Width, которые использует UITableView, чтобы сделать его компоненты правильными.

Цель этих ограничений кажется довольно ясной - они позволяют UITableView, а также UICollectionView взаимодействовать с макетом ограничений и передавать в своей спецификации о том, как большие ячейки (и другие компоненты) должны быть.

Большинство проблем, по-видимому, состоят в том, что у людей есть набор обязательных ограничений, которые несовместимы с этими ограничениями инкапсуляции, также требующими размера 0. Наиболее эффективные ответы, по-видимому, состоят в том, чтобы снизить приоритет определяемых пользователем ограничений до 999, чтобы инфраструктура могла их отменить.

Однако, что меня интересует, почему UITableView требуется ширина 0 для одного из его представлений? Это ошибка? Или это результат неправильного использования? Или это имеет смысл?

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

Ответы

Ответ 1

UIView не обладает внутренним размером, поэтому требуются ограничения ширины и высоты. UIView-Encapsulated-Layout-Width и UIView-Encapsulated-Layout-Height создаются с помощью UICollectionView/UITableView изначально. А позже устанавливается константа ограничения, основанная на методе делегата sizeForItem или heightForRowAtIndexPath. Чтобы убедиться, что UICollectionViewCell/UITableViewCell, созданный в методе cellForItem/cellForRow, будет иметь точный размер.