サブビューのレイアウトを親ビューのサイズを使って相対的に定義することで、
画面回転による縦横にもスムーズに対応することができます。
レイアウト調整の例
-(void) layoutSubviews {
[super layoutSubviews];
float width = self.bounds.size.width;
float height = self.bounds.size.height;
// 間隔(padding)を空ける
float pad = 10;
// 左上
_leftTopView.frame = CGRectMake(pad, pad, 100, 100);
// 中上
_centerTopView.frame = CGRectMake((width - 100) / 2, pad, 100, 100);
// 右上
_rightTopView.frame = CGRectMake(width - 100 - pad, pad, 100, 100);
// 左中
_leftMiddleView.frame = CGRectMake(pad, (height - 100) / 2, 100, 100);
// 中中
_centerMiddleView.frame = CGRectMake((width - 100) / 2, (height - 100) / 2, 100, 100);
// 右中
_rightMiddleView.frame = CGRectMake(width - 100 - pad, (height - 100) / 2, 100, 100);
// 左下
_leftBottomView.frame = CGRectMake(pad, height - 100 - pad, 100, 100);
// 中下
_centerBottomView.frame = CGRectMake((width - 100) / 2, height - 100 - pad, 100, 100);
// 右下
_rightBottomView.frame = CGRectMake(width - 100 - pad, height - 100 - pad, 100, 100);
}
ユニバーサル対応
iPhoneサイズに適したレイアウトとiPadサイズに適したレイアウトは異なるので、分岐が必要になっていきます。IBを使う場合はiPhone用とiPad用のxibファイルを用意したりメンテナンス性に問題がありましたが、layoutSubviewsはシンプルに対応できます。
HogeView.m
-(void) layoutSubviews {
[super layoutSubviews];
float width = self.bounds.size.width;
float height = self.bounds.size.height;
BOOL isPad = ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad);
// iPadの場合は高さ300、iPhoneの場合は高さ100
float hogeH = (isPad) ? 300 : 100;
_hogeView.frame = CGRectMake(x, y, hogeH, width);
}
最終更新:2014年07月15日 00:24