Изменение константы NSLayoutConstraint в cellForRowAtIndexPath постоянно приводит к невозможности удовлетворения ограничений.

У меня в приложении много таких ячеек. Некоторые самостоятельно определяют размер, другие - нет.

Например, допустим, у нас есть настраиваемый UITableViewCell. 100 высота. Внутри представления содержимого мы перетаскиваем 2 объекта UIView. UIViewTop и UIViewBottom. Каждые 50 в высоту. UIViewTop мы размещаем вверху представления содержимого и даем ему ограничения Leading / Trailing / Top / Height. UIViewBottom мы размещаем в нижней части представления содержимого и даем ему ограничения Leading / Trailing / Bottom / Height. Мы также задаем ограничение вертикального интервала между UIViewTop и UIViewBottom.

Теперь иногда мы хотим, чтобы отображался только UIViewTop, а иногда мы хотим, чтобы отображались UIViewTop и UIViewBottom. Итак, мы перетаскиваем ограничение UIViewBottomHeight как IBOutlet NSLayoutConstraint.

Затем в cellForRowAtIndexPath ... мы либо устанавливаем для этого ограничения IBOutlet значение 0 или 50, в зависимости от того, хотим ли мы показать эту часть или нет.

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

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

`cell.constraintUIViewBottomHeight.constant = __`

Я хочу иметь возможность изменять константы ограничения, но не получать предупреждение Unable to simultaneously satisfy constraints в консоли.


person chris P    schedule 08.07.2015    source источник


Ответы (2)


Я предполагаю, что приоритетом для ограничения constraintUIViewBottomHeight является Required / 1000 .. Я бы попробовал, снизив приоритет до 999 или что-то в этом роде, чтобы избавиться от предупреждения ..

person Subbu    schedule 08.07.2015
comment
Работал для меня, у меня была такая же проблема, и при этом проблема исчезла. - person Gian Franco Zabarino; 03.06.2016

Похоже, проблема возникает из-за того, что у вас есть как ограничение высоты, так и ограничение от дна до контейнера в UIView внизу. Если вы измените высоту, ограничение от дна к контейнеру будет отключено. Вы должны иметь возможность использовать только высоту (или только нижнюю часть контейнера) и полностью избавиться от ограничения снизу на контейнер (или ограничения по высоте). Автоматическая компоновка требует достаточно ограничений только для определения уникального размера и местоположения элемента.

person trevorj    schedule 08.07.2015