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

Например, предположим, что у нас есть пользовательская 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 в консоли.

2
chris P 8 Июл 2015 в 19:01

2 ответа

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

3
Subbu 8 Июл 2015 в 19:24
У меня сработало, у меня была такая же проблема, и когда я это сделал, проблема исчезла.
 – 
Gian Franco Zabarino
3 Июн 2016 в 00:01

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

0
trevorj 8 Июл 2015 в 19:15