AutoLayout без использования раскадровки или интерфейса Builder

Я создаю приложение, где я хочу полностью избежать использования 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