[iOS] Auto Layout 既存のframeとも併用

2012/09/20

こんにちは。きんくまです。

Auto Layoutをすべてのものに適用してもよいのですが、
大枠はAuto Layoutにして各パーツは普通のframeを使ったレイアウトにしたい場合もあります。

例えば、ヘッダー、フッター、コンテンツ部分はAutoLayoutを使って、コンテンツ部分はframeを使いたいなどです。

そんなときのコードサンプルです。
今回の場合は赤い部分がAutoLayoutを使っていて、そのsubviewの青い部分はframeを使っています。

autolayout_test2

ARC利用

- (void)loadView
{
    UIView *myView = [[UIView alloc] init];
    myView.backgroundColor = [UIColor greenColor];
    UIView *parentRedView = [[UIView alloc] init];
    parentRedView.backgroundColor = [UIColor redColor];
    UIView *childBlueView = [[UIView alloc] init];
    childBlueView.backgroundColor = [UIColor blueColor];
    [myView addSubview:parentRedView];
    [parentRedView addSubview:childBlueView];
    if([myView respondsToSelector:@selector(addConstraint:)]){
        [myView setTranslatesAutoresizingMaskIntoConstraints:NO];
        [parentRedView setTranslatesAutoresizingMaskIntoConstraints:NO];
        NSMutableArray *constraints = [NSMutableArray array];
        [constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"|-50-[parentRedView(==180)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings( parentRedView)]];
        [constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-80-[parentRedView]-(<=30)-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(parentRedView)]];
        [myView addConstraints:constraints];
    }else{
        parentRedView.frame = CGRectMake(50, 80, 180, 200);
    }
    childBlueView.frame = CGRectMake(20, 30, 80, 120);
    self.view = myView;
}

自作iPhoneアプリ 好評発売中!
フォルメモ - シンプルなフォルダつきメモ帳
ジッピー電卓 - 消費税や割引もサクサク計算!

ページトップへ戻る