Если я внедряю AutoLayout программно в iOS, правильно ли использовать метод initWithFrame? Если нет способа инициализировать представление предпочтительного размера?
Автоматическая компоновка с использованием initWithFrame?
Ответ 1
Лучше избегать initWithFrame
, если у вас нет выбора. С помощью Auto Layout подход заключается в определении двух ограничений, определяющих ширину и высоту. Существуют разные способы сделать это, но если вы делаете это программно, в методе updateViewConstraints
вашего контроллера представления или методе updateConstraints
представления, проверьте, были ли уже созданы ограничения, а если нет, добавьте их на ваш взгляд.
например.
[myConstraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[_mySubView]-(200)-|"
options:0
metrics:nil
views:_myViewsDictionary]];
[myConstraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[_mySubView(100)]-|"
options:0
metrics:nil
views:_myViewsDictionary]];
Тем не менее, лучше сделать это с помощью Interface Builder. Как только вы привыкнете к этому - и к нему привыкнуть, вы найдете его фантастическим временным ресурсом и намного лучше, чем определение ваших ограничений в коде.
Ответ 2
Почему не просто: myView = [UIView new];
Это то же самое, что myView = [[UIView alloc] init]; Он будет работать в вашем случае, если после этого в какой-то момент вы добавите требуемые ограничения.
Ответ 3
override init(frame: CGRect) {
super.init(frame: frame)
NSBundle.mainBundle().loadNibNamed("YourView", owner: self, options: nil)
self.containerView.frame = CGRectMake(0, 0, CGRectGetWidth(frame), CGRectGetHeight(frame))
self.addSubview(self.containerView)
}
Это то, что я делаю прямо сейчас. я работаю с немного устаревшим кодом, и иногда для меня требуется много времени для преобразования всех, чтобы использовать автозапуск. Опять же, как указано в @Max MacLeod Не используйте это, если у вас нет выбора.