借著把玩新機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高度的變化而正常顯示。
喜歡和關注都是對我的鼓勵和支持~