適配iPhoneX

借著把玩新機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高度的變化而正常顯示。

喜歡和關注都是對我的鼓勵和支持~

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容