成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

iOS開發·適配iPhone X相關的宏和方法

移動開發
過了好久,今天終于有時間總結一下適配iPhone X相關的坑,總的來說有兩類坑,一個是導航欄+狀態欄的高度發生了變化,一個是一些沒有實現實現-tableView: viewForHeaderInSection:和-tableView: viewForFooterInSection:等代理方法的UITableView會出錯位的問題。

過了好久,今天終于有時間總結一下適配iPhone X相關的坑,總的來說有兩類坑,一個是導航欄+狀態欄的高度發生了變化,一個是一些沒有實現實現-tableView: viewForHeaderInSection:和-tableView: viewForFooterInSection:等代理方法的UITableView會出錯位的問題。

 

1283539-1f9e771f3c5134b1.png

1. 判斷是否iPhone X:返回YES或NO

1.1 判斷:宏

(1)依據屏幕分辨率

三目運算法

 

  1. //是否iPhoneX YES:iPhoneX屏幕 NO:傳統屏幕 
  2. #define kIs_iPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO

多行邏輯判斷

 

  1. //是否iPhoneX 1:iPhoneX屏幕 0:傳統屏幕 
  2. #define kIs_iPhoneX_test ({\ 
  3. int tmp = 0;\ 
  4. if ([UIScreen instancesRespondToSelector:@selector(currentMode)]) {\ 
  5.     if (CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size)) {\ 
  6.         tmp = 1;\ 
  7.     }else{\ 
  8.         tmp = 0;\ 
  9.     }\ 
  10. }else{\ 
  11.     tmp = 0;\ 
  12. }\ 
  13. tmp;\ 
  14. }) 

其中,反斜杠\并不是注釋或者其它的無用符號,其實是多行宏換行必須要用的標志。

***一句tmp;\也是必須的,因為要將經過邏輯判斷得到的tmp作為該宏的返回值。

(2)依據屏幕尺寸

 

  1. #define kIs_iPhoneX (kSCREEN_WIDTH == 375.f && kSCREEN_HEIGHT == 812.f) 
  2. #define kSCREEN_WIDTH  ([UIScreen mainScreen].bounds.size.width) 
  3. #define kSCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height) 

1.2 判斷:方法

方法:依據設備型號

 

  1. +(BOOL)getIs_iPhoneX{ 
  2.     struct utsname systemInfo; 
  3.     uname(&systemInfo); 
  4.     NSString *platform = [NSString stringWithCString: systemInfo.machine encoding:NSASCIIStringEncoding]; 
  5.       
  6.     if([platform isEqualToString:@"iPhone10,3"]||[platform isEqualToString:@"iPhone10,6"]) { 
  7.         return YES; 
  8.     }else
  9.         return NO
  10.     } 

2. 靈活返回狀態欄+導航欄的高度

需求:靈活得到導航欄+狀態欄的高度,作為一個子視圖Y軸的起點。

宏定義

  1. #define kStatusBarAndNavigationBarHeight (kIs_iPhoneX ? 88.f : 64.f) 

調用范例

 

  1. //自動適配 
  2. _segmentedControl.frame = CGRectMake(0, kStatusBarAndNavigationBarHeight, kSCREEN_WIDTH, 55); 

3. 拓展:獲得iOS系統與App版本信息

獲取iOS系統版本號:返回字符串

 

  1. + (NSString *)getSystemVersion{ 
  2.     return [[UIDevice currentDevice] systemVersion]; 

獲取App版本號:返回字符串

 

  1. + (NSString *)getAppVersion{ 
  2.     NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary]; 
  3.     // 獲取App的版本號 
  4.     NSString *appVersion = [infoDic objectForKey:@"CFBundleShortVersionString"]; 
  5.     return appVersion; 

4. 適配iPhone X的其他問題

適配iPhone X和Xcode 9的過程中,除了與導航欄相關的問題,還有一個問題經常出現,就是UITableView相關的問題。下面兩個辦法可以解決多數錯位的問題。

VC創建tableView屬性的時候這樣設置

 

  1. self.tableView.estimatedRowHeight = 0; 
  2. self.tableView.estimatedSectionHeaderHeight = 0; 
  3. self.tableView.estimatedSectionFooterHeight = 0; 

還可以這樣設置

 

  1. //cell自適應高度 
  2. self.tableView.rowHeight = UITableViewAutomaticDimension; 
  3. //預估行高 
  4. self.tableView.estimatedRowHeight = 44.0f; 

關于根視圖的安全區

iOS新增了個safeArea,原來的老代碼中,規定子視圖跟根子視圖的關系的代碼需要新增一個判斷:當iOS 11時,需要改為子視圖跟根子視圖的安全區的關系。這樣就不會在iPhone X的底部虛擬home有任何控件干擾了。

 

  1. if (@available(iOS 11.0, *)) { 
  2.     make.edges.equalTo(self.view.safeAreaInsets) 
  3. else { 
  4.     make.edges.equalTo(self.view

當然,一般除了tabbar不能放在這個底部虛擬home區,其它的視圖tableView視圖或者網頁視圖時可以放在底部虛擬home區中的。這時候,不需要強調必須把子視圖放在safeArea之內,原來的老代碼也就不用改。

責任編輯:未麗燕 來源: 陳滿iOS
相關推薦

2013-07-23 07:34:54

iOS開發學習適配iphone5

2017-03-20 15:58:20

iOS開發常用宏

2017-11-13 16:35:36

iPhone X全面屏APP

2018-07-26 15:16:50

小程序iPhone X甜酸

2011-07-25 15:46:10

iPhone 動態

2017-12-01 09:57:21

谷歌iPhone X蘋果

2011-07-08 14:58:16

iPhone Xcode iOS

2011-08-22 14:12:48

iPhone開發NSTableView

2015-07-20 10:54:47

IOS提高效率工具

2011-08-02 13:35:41

iOS開發 Get Post

2011-08-19 13:34:33

iPhone應用ABAddressBo

2011-03-16 11:22:16

iconDefaultiPhone

2018-01-05 12:02:46

iPhoneiPhone X蘋果

2021-09-07 10:17:35

iOS多語言適配設計

2015-02-05 14:31:45

iPhone適配

2017-09-13 09:22:57

iPhone X

2018-01-02 16:08:00

AndroidiOSReact Nativ

2011-05-16 17:19:29

游戲開發iPhone

2018-04-28 15:42:46

iPhone XiPhone蘋果

2011-07-22 18:25:20

XCode iPhone SDK
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 手机av在线| 欧美视频二区 | 日韩成人免费视频 | 中文字幕综合 | 日日夜夜天天 | 国产亚洲一区二区在线观看 | 国产高清在线精品一区二区三区 | 久久久免费电影 | 午夜99| 国产 欧美 日韩 一区 | 午夜精品久久久久久久久久久久 | 国产精品久久久久久久久 | 国产在线a| 9999国产精品欧美久久久久久 | 国产中文一区二区三区 | 在线免费观看黄网 | 欧美日韩精品中文字幕 | 欧美高清视频 | 最新午夜综合福利视频 | 欧美黑人一区二区三区 | av在线免费观看网站 | 久久久高清 | 欧美日韩在线免费 | 亚洲视频国产视频 | 99re视频这里只有精品 | 亚洲午夜在线 | 91精品一区二区三区久久久久久 | 亚洲+变态+欧美+另类+精品 | 国产又色又爽又黄又免费 | 久久久久久久久久久蜜桃 | 亚洲精品二区 | 久久一区二区av | 国产观看 | 亚洲三区在线观看 | 国产日韩精品视频 | 99re6热在线精品视频播放 | www.99热| 精品丝袜在线 | 亚洲先锋影音 | av免费入口| 国产乱码精品一区二区三区中文 |