AutoLayout不使用Storyboard或Interface Builder

我正在构build一个应用程序,我希望完全避免使用Storyboard和Interface Builder,因此应该在代码中指定所有UI。 我正在使用PureLayout ,一个很好的API来configurationAutoLayout约束。

但是,我的问题是,似乎像AutoLayout不使用Interface Builder时被禁用。 updateViewConstraints ,根据PureLayout作者给出的build议放置布局的方法根本不被调用。

只是为了提供更多有关我的设置的信息:

  • 删除Main.storyboard并从Info.plist删除条目
  • AppDelegate.m手动设置self.window并添加MainMainController UINavigationController作为rootViewController

如上所述,我的主要问题是, updateViewConstraints不会在MainViewController调用,但UI元素都显示与我在初始化过程中传递给他们的frame

注意 :在我看来,我只是需要在某处启用某个标志来模仿Interface Builder中的checkbox,您可以使用它来指示是否要使用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