借著把玩新機(jī)iPhoneX的機(jī)會(huì),對(duì)iPhoneX應(yīng)用中增高的UINavigationBar進(jìn)行了詳細(xì)的學(xué)習(xí)。應(yīng)用適配iPhoneX, 也主要是適配UINavigationBar的變化。
在iPhoneX和iPhone8上運(yùn)行以下代碼:
#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中的結(jié)果:
statusBarFrame: {{0, 0}, {375, 44}}
navBar: {{0, 44}, {375, 44}}
width: 375.000000
height: 812.000000
iPhone8中的結(jié)果:
statusBarFrame: {{0, 0}, {375, 20}}
navBar: {{0, 20}, {375, 44}}
width: 375.000000
height: 667.000000
可以看到iPhoneX中statusBarFrame增加了44-20=24個(gè)點(diǎn)的高度。我們知道,iPhoneX以前開(kāi)發(fā)中,導(dǎo)航欄navigationBar的高度為44,狀態(tài)欄statusBar的高度為20。在自定義navigationBar的頁(yè)面,自定義的View只要以相對(duì)于頂部為64個(gè)點(diǎn)的高度放置即可,而在iPhoneX中就需要變成88個(gè)點(diǎn)。
項(xiàng)目中通過(guò)UINavigationController跳轉(zhuǎn), 是我們常常遇到的場(chǎng)景:

其中第二個(gè)頁(yè)面SecondViewController在iPhone8中的渲染情況:

iPhoneX中為:

明顯看到back被UINavigationBar所遮蓋。
綜上,iPhoneX中的UINavigationBar高度為88。以前以相對(duì)頂部偏移64的高度設(shè)置frame的View會(huì)顯示不正常。而以相對(duì)布局(masonry、auto-layout)設(shè)置的界面會(huì)自動(dòng)調(diào)整。另外,當(dāng)UINavigationBar的translucent(透明度)屬性設(shè)置為false時(shí),應(yīng)用也會(huì)識(shí)別出UINavigationBar高度的變化而正常顯示。
喜歡和關(guān)注都是對(duì)我的鼓勵(lì)和支持~