借著把玩新機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以前開發(fā)中榨了,導航欄navigationBar的高度為44,狀態(tài)欄statusBar的高度為20攘蔽。在自定義navigationBar的頁面龙屉,自定義的View只要以相對于頂部為64個點的高度放置即可,而在iPhoneX中就需要變成88個點秩彤。
項目中通過UINavigationController跳轉, 是我們常常遇到的場景:
其中第二個頁面SecondViewController在iPhone8中的渲染情況:
iPhoneX中為:
明顯看到back被UINavigationBar所遮蓋叔扼。
綜上,iPhoneX中的UINavigationBar高度為88漫雷。以前以相對頂部偏移64的高度設置frame的View會顯示不正常瓜富。而以相對布局(masonry、auto-layout)設置的界面會自動調整降盹。另外与柑,當UINavigationBar的translucent(透明度)屬性設置為false時,應用也會識別出UINavigationBar高度的變化而正常顯示蓄坏。
喜歡和關注都是對我的鼓勵和支持~