1

Storyboard と Interface Builder の使用を完全に避けたいアプリを構築しているため、すべての UI をコードで指定する必要があります。制約を構成するための優れた API であるPureLayoutを使用しています。AutoLayout

AutoLayoutただし、私の問題は、 Interface Builder を使用していないときに無効になっているように見えることです。updateViewConstraintsPureLayout作者の推奨通りにレイアウトを入れる方法は一切呼び出されません。

私のセットアップについてもう少し情報を提供するために:

  • Main.storyboard私のエントリを削除して削除しましたInfo.plist
  • 手動でセットアップself.windowしてasAppDelegate.mで追加UINavigationControllerMainMainControllerrootViewController

前述のように、私の主な問題は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
4

0 に答える 0