在做iOS6和iOS7,以及3.5寸和4寸螢幕适配的時候遇到的frame的問題:
經過驗證在viewcontroller上的self.view的坐标在有無系統navigationbar時的變化:
mainScreen: 568 4英寸
iOS7.1 -------- 無navigationbar: self.view(0,0,320,568)
-------- 有navigationbar: self.view(0,0,320,568) 坐标是基于navigationbar下方開始計算
iOS6.1 -------- 無navigationbar: self.view(0,20,320,548)
-------- 有navigationbar: self.view(0,20,320,548) 坐标是基于navigationbar下方開始計算
mainScreen: 480 3.5英寸
iOS7.1 -------- 無navigationbar: self.view(0,0,320,480)
-------- 有navigationbar: self.view(0,0,320,480) 坐标是基于navigationbar下方開始計算
iOS6.1 -------- 無navigationbar: self.view(0,20,320,460)
-------- 有navigationbar: self.view(0,20,320,460)坐标是基于navigationbar下方開始計算
是以為了适配友善,應該在parentViewController裡面設定contentView,如下:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor = [UIColor whiteColor];
[self setNavgationBackground];
[self addNavLeftButtonTitle:@"傳回"];
backView=[[UIView alloc]initWithFrame:CGRectMake(0, 0, mainScreenWidth, mainScreenHeight)];
[self.view addSubview:backView];
contentView = [[UIView alloc] initWithFrame:CGRectMake(0, knavigationHeight, 320, mainScreenHeight-ktabbarHeight-knavigationHeight)];
[contentView setUserInteractionEnabled:YES];
[contentView setBackgroundColor:[UIColor clearColor]];
[backView addSubview:contentView];
}
#define kContentViewHeight mainScreenHeight-ktabbarHeight-knavigationHeight
#define kstatusBar (k_IS_IOS7?20:0)
#define ktabbarHeight (self.tabBarController.tabBar.hidden?0:45)
#define khasNavigationbar (self.navigationController.navigationBar.hidden?0:65)
#define knavigationHeight (k_IS_IOS7?(khasNavigationbar?0:65):(khasNavigationbar?0:45))