Storyboard と Interface Builder の使用を完全に避けたいアプリを構築しているため、すべての UI をコードで指定する必要があります。制約を構成するための優れた API であるPureLayoutを使用しています。AutoLayout
AutoLayout
ただし、私の問題は、 Interface Builder を使用していないときに無効になっているように見えることです。updateViewConstraints
、PureLayout
作者の推奨通りにレイアウトを入れる方法は一切呼び出されません。
私のセットアップについてもう少し情報を提供するために:
Main.storyboard
私のエントリを削除して削除しましたInfo.plist
- 手動でセットアップ
self.window
してasAppDelegate.m
で追加UINavigationController
MainMainController
rootViewController
前述のように、私の主な問題はupdateViewConstraints
呼び出されないことですが、初期化中に渡しMainViewController
た s とともに UI 要素がすべて表示されます。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