こんにちは。きんくまです。
Xcode4.5が出ました。
Auto Layoutを使えばiPhone5の画面サイズにも対応することが可能です。
Auto LayoutはInterface Builderを使ったり、コードを直接書いたりすることで適用することができます。
詳しくはAppleのドキュメント
WWDCのビデオ,ドキュメントを見ればわかります。
WWDC 2012: Introduction to Auto Layout for iOS and OS X
、、見ればわかるはずなんですが、今日やってみたところ、ちょっとひっかかってしまいました。
IBは基本使ってないので、コードでやりました。
それでUIViewのsetTranslatesAutoresizingMaskIntoConstraintsをNOをすればうまくいったのですが、わかるまでハマりました、、。
取り急ぎ、わかったところまで断片書いておきます。
AutoLayoutができるかどうかのif文の条件はあやしいかも。
ARC使用
- (void)loadView { UIView *myview = [[UIView alloc] init]; myview.backgroundColor = [UIColor greenColor]; UIView *redView = [[UIView alloc] init]; redView.backgroundColor = [UIColor redColor]; UIView *blueView = [[UIView alloc] init]; blueView.backgroundColor = [UIColor blueColor]; [myview addSubview:redView]; [myview addSubview:blueView]; //Auto layoutに対応する場合==iOS6以上 if([myview respondsToSelector:@selector(addConstraints:)]){ [myview setTranslatesAutoresizingMaskIntoConstraints:NO]; [redView setTranslatesAutoresizingMaskIntoConstraints:NO]; [blueView setTranslatesAutoresizingMaskIntoConstraints:NO]; NSMutableArray *tmpConstraints = [NSMutableArray array]; [tmpConstraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"|-50-[redView(==100)]-30-[blueView(==100)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(redView,blueView)]]; [tmpConstraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-30-[redView(==30)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(redView)]]; [tmpConstraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-30-[blueView(==redView)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(blueView,redView)]]; [myview addConstraints:tmpConstraints]; //iOS5以下 }else{ redView.frame = CGRectMake(50, 80, 100, 30); blueView.frame = CGRectMake(180, 80, 100, 30); } self.view = myview; }
あとVisual Format Languageがうまく適用できない場合は、constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:も併用してちょーだいって書いてあった。