Я создаю приложение, где я хочу полностью избежать использования Storyboard и Interface Builder в целом, поэтому весь пользовательский интерфейс должен быть указан в коде. Я использую PureLayout, хороший API для настройки ограничений AutoLayout.
Тем не менее, моя проблема в том, что кажется, что AutoLayout отключен, если не используется Interface Builder. updateViewConstraints, метод, в котором я помещал макет в соответствии с рекомендацией автора PureLayout, вообще не вызывается.
Просто чтобы немного узнать о моей настройке:
- удален
Main.storyboardи удалил запись из моегоInfo.plist - вручную установите
self.windowвAppDelegate.mи добавьтеUINavigationControllerс помощьюMainMainControllerв качествеrootViewController
Как уже упоминалось, моя основная проблема заключается в том, что updateViewConstraints не вызывается на MainViewController, но все элементы интерфейса отображаются с помощью frame, который я передал им во время инициализации.
Примечание. Мне кажется, мне просто нужно включить некоторый флаг где-нибудь, чтобы имитировать флажок из Interface Builder, с помощью которого вы можете указать, хотите ли вы использовать AutoLayout.
MainViewController.m
@interface MainViewController ()
@property (nonatomic, strong) UIButton *startButton;
@property (nonatomic, assign) BOOL didSetupConstraints;
@end
@implementation MainViewController
- (void)viewDidLoad
{
[super viewDidLoad];
[self.view addSubview:self.startButton];
[self.view setTranslatesAutoresizingMaskIntoConstraints:NO];
}
- (UIButton *)startButton
{
if (!_startButton) {
UIButton *startButton = [UIButton buttonWithType:UIButtonTypeSystem];
CGRect startButtonFrame = CGRectMake(75.0, 75.0, 250.0, 44.0);
startButton.frame = startButtonFrame;
[startButton setTitle:@"Start" forState:UIControlStateNormal];
[startButton setTranslatesAutoresizingMaskIntoConstraints:NO];
_startButton = startButton;
}
return _startButton;
}
- (void)updateViewConstraints
{
NSLog(@"Update view contraints");
if (!self.didSetupConstraints) {
[self.startButton autoCenterInSuperview];
self.didSetupConstraints = YES;
}
[super updateViewConstraints];
}
@end
