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, будет иметь точный размер.