2015-11-30 5 views
6

У меня есть UIViewController 1, который имеет scroll view. Внутри этого scrollview есть container view, который прикреплен к top/bottom leading/trailing (без фиксированной высоты). Container view имеет UITableView, привязанный к top/bottom trailing/leading и height constraint with 0 constant, что изменится в размере updateViewConstraints до размера контента высота.UIView-Encapsulated-Layout-Height и Container View

При появлении Вид UIViewController 1, контейнер вид имеет ограничение:

NSLayoutConstraint: 0x7b03e5f0 V: [UITableView: 0x7c42a200 (54)], NSLayoutConstraint: 0x7b0ba120 V: | - (0) - [UITableView : 0x7c42a200] (Имена: '|': UIView: 0x7b0b7000), NSLayoutConstraint: 0x7b0ba1b0 V: [UITableView: 0x7c42a200] - (0) - | (Имена: '|': UIView: 0x7b0b7000), NSLayoutConstraint: 0x7b65f900 'UIView-инкапсулированные-Layout-Height' V: [UIView: 0x7b0b7000 (0)]

будет пытаться восстановить разбив ограничение

NSLayoutConstraint: 0x7b03e5f0 V: [UITableView: 0x7c42a200 (54)]

Что такое UIView-Encapsulated-Layout-Heigh т? Как я могу пропустить его? Потому что он нарушает «правильное» ограничение (что я обновляю до размера размера контента). Спасибо

+0

Думайте, что это высота вашей ячейки таблицы. Как вы это устанавливаете? – beyowulf

+0

У меня не было ограничений на ячейку. Высота ячейки определяется heightForRowAtIndexPath:, которая возвращает tableView.rowHeight. Как это возможно? Спасибо – Serd

+0

Что появляется, когда вы строите и запускаете? Вы пытались изменить цвет фона ваших представлений, чтобы вы могли видеть, как они рисуются? – beyowulf

ответ

0

Задайте ограничение высоты контейнера. Создайте IBOutlet указанного ограничения высоты, назовите его «containerViewHeightConstraint» или что-то в этом роде. Когда вы обновляете ограничение высоты таблицы на 54, произнесите что-то вроде:

self.containerViewHeightConstraint.constant = 54.0; 
+0

Спасибо за ответ, но containerViewHeightConstraint и TableViewConstraint находятся в разных контроллерах. Как я могу узнать контроллер контроллера 1, когда изменилось ограничение таблицы? Спасибо – Serd

+0

Вы можете использовать делегирование или NSNotificationCenter – beyowulf

+0

Плохой подход, я надеюсь (и обязательно), что есть лучшее решение. Тем не менее спасибо – Serd

8

Наконец-то я нашел проблему. Просмотр, который добавлен как представление subview в контейнер, переводитAutoresizingMaskIntoConstraints = YES, поэтому NSLayoutConstraint: 0x7b65f900 'UIView-Encapsulated-Layout-Height' V: [UIView: 0x7b0b7000 (0)] появился и вызвал некоторые проблемы. Добавить атрибут runtime translatesAutoresizingMaskIntoConstraints = НЕТ, и это исправит проблему.

+0

Это решило мою проблему! После добавления контейнера. Используйте метод prepareForSegue для доступа к представлению, затем установите значение false translatesAutoresizingMaskIntoConstraints этого представления –

+0

, он также может быть установлен в построителе интерфейса в атрибутах времени выполнения. – Serd

+0

Я попробую это, кажется, хорошая идея! –

1

Вместо установки вручную translatesAutoresizingMaskIntoConstraints на contentView ячейки или вручную регулировать высоту этой точки зрения, вы должны просто установить estimatedRowHeight и rowHeight для Tableview, как описано в WWDC 2014 видео What's New in Table and Collection Views:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.tableView.estimatedRowHeight = 44; 
    self.tableView.rowHeight = UITableViewAutomaticDimension; 
} 

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

0

Эти проблемы возникают, когда возникает конфликт между этим ограничением.

В вашем случае вы уже указали верхнее/нижнее ведущее/конечное ограничение на внутреннее представление таблицы, которое удовлетворяет требуемому ограничению для представления таблицы, поэтому нет необходимости в предоставлении еще одного ограничения (фиксированное ограничение высоты с константой 0) к нему.

NSLayoutConstraint:0x7b03e5f0 V:[UITableView:0x7c42a200(54)], NSLayoutConstraint:0x7b0ba120 V:|-(0)-[UITableView:0x7c42a200] 

над двумя линиями означает, что есть столкновение в вертикальном направлении для представления таблицы, которое имеет постоянную 0.

Два способа вы можете решить эту проблему,

1 - Снять ограничение высоты, установите нижнее ограничение на ноль initailly. Возьмите выход нижнего ограничения и установите значение нижнего ограничения динамически.

2 - Снимите ограничение нижнего пространства, установите ограничение по высоте на ноль. Возьмите выходное ограничение высоты и установите высоту табличного представления динамически.

Надеюсь, это вам поможет.

0

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

Вот мой контейнер:

enter image description here

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

enter image description here

Я говорю «дно», потому что в моей оценке, что, вероятно, один вы будете иметь конфликт с, но это может быть любой край, который неявно устанавливает ширину вашего контейнера.

0

Перейдите к контейнеру xib -> снимите флажок «Авторезистировать подпункты» в разделе «чертеж». Он исправил это для меня. (Элемент является элементом, который дает вам ограничение конфликт)

drawing

0

Наконец я решить эту проблему.
1. В настройке tableView установите: tableView.estimatedRowHeight = 100.
2. В последнем представлении вашей камеры установите: make.bottom.equalTo(contentView).priority(999).
3. Запустите свой код, возможно, все в порядке!

Смежные вопросы