借着把玩新机iPhoneX的机会,对iPhoneX应用中增高的UINavigationBar进行了详细的学习。应用适配iPhoneX, 也主要是适配UINavigationBar的变化。
在iPhoneX和iPhone8上运行以下代码:
#define ScreenSize [UIScreen mainScreen].bounds.size
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationController.navigationBar.translucent = false;
UINavigationBar *navBar = self.navigationController.navigationBar;
;
navBar.barTintColor = [UIColor greenColor];
NSLog(@"statusBarFrame: %@", NSStringFromCGRect([UIApplication sharedApplication].statusBarFrame));
NSLog(@"navBar: %@", NSStringFromCGRect(navBar.frame));
NSLog(@"width: %f", ScreenSize.width);
NSLog(@"height: %f", ScreenSize.height)
}
iPhoneX中的结果:
statusBarFrame: {{0, 0}, {375, 44}}
navBar: {{0, 44}, {375, 44}}
width: 375.000000
height: 812.000000
iPhone8中的结果:
statusBarFrame: {{0, 0}, {375, 20}}
navBar: {{0, 20}, {375, 44}}
width: 375.000000
height: 667.000000
可以看到iPhoneX中statusBarFrame增加了44-20=24个点的高度。我们知道,iPhoneX以前开发中,导航栏navigationBar的高度为44,状态栏statusBar的高度为20。在自定义navigationBar的页面,自定义的View只要以相对于顶部为64个点的高度放置即可,而在iPhoneX中就需要变成88个点。
项目中通过UINavigationController跳转, 是我们常常遇到的场景:
self.navigationItem.title = @"SecondViewController";
其中第二个页面SecondViewController在iPhone8中的渲染情况:
iPhone8
iPhoneX中为:
iPhoneX
明显看到back被UINavigationBar所遮盖。
综上,iPhoneX中的UINavigationBar高度为88。以前以相对顶部偏移64的高度设置frame的View会显示不正常。而以相对布局(masonry、auto-layout)设置的界面会自动调整。另外,当UINavigationBar的translucent(透明度)属性设置为false时,应用也会识别出UINavigationBar高度的变化而正常显示。
喜欢和关注都是对我的鼓励和支持~
网友评论