В моем приложении у меня встроенный контроллер детского представления, в который во время выполнения я должен добавить один или несколько «Редактор UIView» на основе данных, поступающих с сервера. Я мог бы моделировать каждый «Редактор» как полный UIViewController в файле xib и добавлять его во время выполнения. Родитель «Редактора» имеет некоторые собственные элементы (например, заголовки и несколько кнопок), поэтому я попытался построить многоуровневый подход, используя один дочерний UIViewController и загрузив «Редакторы» в свой UIScrollview на лету. Однако я не могу заставить Autolayout сотрудничать. На этой диаграмме показана основная компоновка. Проблемы с Autolayout и UIScrollview и Child View
Проблемы начинаются с того, что у вас есть «Content View», встроенный в UIScrollview. Я могу заставить просмотр содержимого работать нормально с scrollview. Когда я добавляю представление редактора и добавляю ограничения времени выполнения к представлению содержимого, я получаю несколько жалоб на автомат размещения, а размер содержимого прокрутки - 0,0, поэтому я явно не получаю то, что мне нужно.
Любые идеи о том, как подойти к этому? Я всегда мог просто дублировать дополнительные элементы дочернего контроллера для каждого редактора, но было бы неплохо иметь эту работу в этом многоуровневом стиле.
Примечание. Я сделал это сначала с помощью UITableViewController, где каждый редактор является UITableViewCell, и этот автоматический макет понравился, но я хотел посмотреть, могу ли я сделать это без таблицы. Возможно, я вернусь к этому.
Добавлен это во время выполнения:
_editor = [self editorForDataType];
[_contentView addSubview:_editor];
NSLayoutConstraint *leftConstraint = [NSLayoutConstraint constraintWithItem:_editor
attribute:NSLayoutAttributeLeading
relatedBy:0
toItem:self.contentView
attribute:NSLayoutAttributeLeft
multiplier:1.0
constant:0];
[self.contentView addConstraint:leftConstraint];
NSLayoutConstraint *rightConstraint = [NSLayoutConstraint constraintWithItem:_editor
attribute:NSLayoutAttributeTrailing
relatedBy:0
toItem:self.contentView
attribute:NSLayoutAttributeRight
multiplier:1.0
constant:0];
[self.contentView addConstraint:rightConstraint];
NSLayoutConstraint *topConstraint = [NSLayoutConstraint constraintWithItem:_editor
attribute:NSLayoutAttributeLeading
relatedBy:0
toItem:self.contentView
attribute:NSLayoutAttributeTop
multiplier:1.0
constant:0];
[self.contentView addConstraint:topConstraint];
NSLayoutConstraint *bottomConstraint = [NSLayoutConstraint constraintWithItem:_editor
attribute:NSLayoutAttributeTrailing
relatedBy:0
toItem:self.contentView
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:0];
[self.contentView addConstraint:bottomConstraint];
вы установите translatesAutoresizingMaskIntoConstraints на NO для взглядов _editor ли? – rdelmar
Да, хотя по умолчанию он по-видимому НЕ. – ahwulf
В каком методе вы добавили ограничения? 'ViewDidLoad'? –