麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 系統 > iOS > 正文

適配iPhoneXS max和iPhoneX R的方法示例

2019-10-21 18:39:36
字體:
來源:轉載
供稿:網友

9.18更新:經測試發現iOS12修改了非劉海屏safeArea的值! 拿iPhone6豎屏情況下為例iOS11中返回的safeAreaInsets為(0,0,0,0);iOS12中返回的safeAreaInsets為(20,0,0,0);是的這個top-20是狀態欄。這里大家要注意下,不應該盲目使用safeAreaInsets,而是使用我下面類似的判斷劉海屏的方法來區分劉海屏后再決定是否使用safeAreaInsets;

今年的三款新手機已經發布,加上Xcode10已經發布GM Seed版本,也可以使用模擬器對新機進行適配,所以趕緊開始吧!

三款手機的屏幕大小

適配,iPhoneXSmax,iPhoneXR

圖片官網地址

上面是像素單位,然后我們找到對應的倍數,換算成-點pt;

適配,iPhoneXSmax,iPhoneXR

圖片官網地址

最后得到:

iPhone XS 375812pt*

iPhone XR 414896pt*

iPhone X 414896pt*

總結一下,因為X已經都是陪過了XS基本上就是忽略不管了,而新出的XR和XS Max雖然屏幕像素不同(一個LCD屏幕一個OLED屏幕)所以一個2x一個3x最終得到的pt大小是一樣的(這里可以看出蘋果果然沒白給你便宜)。加上iOS11開始引入了safeAreaInsets,如果之前使用了這個屬性,我們幾乎不需要對項目中的頁面做調整,那么最后只剩下一部要做 添加兩個尺寸的啟動圖。

添加啟動圖

為什么要添加啟動圖?

當我們在XR的模擬器直接跑之前的老項目(已經適配過iPhoneX),做如下打印,你會發現:

適配,iPhoneXSmax,iPhoneXR

WTF?難道是Xcode10的bug?再試試XS Max我相信你會得到一樣的結果。

這里解釋下。你是否還記得iPhoneX剛出來的時候跑沒有適配過的項目,會導致app打開屏幕上下各有幾十像素的黑屏?原因是因為沒有假如iPhoneX的啟動頁!同理我們需要先引入啟動頁。

適配,iPhoneXSmax,iPhoneXR

圖片官網地址

這是啟動圖尺寸,直接照著像素單位切圖即可。

需要注意的是,當你的老項目用Xcode10打開后,打開Images.xcassets文件夾,再到LaunchImage文件夾下時,找不到以上兩個新機型的占位框,最簡單的辦法就是右鍵添加一個新的LaunchImage,然后刪除老的LaunchImage,記得新建的文件夾要改名LaunchImage哦。

適配,iPhoneXSmax,iPhoneXR

新建的LaunchImage會出現兩個新機型的占位框:

適配,iPhoneXSmax,iPhoneXR

啟動頁添之后,再做打印,就會的到正確的屏幕尺寸了!

適配,iPhoneXSmax,iPhoneXR

頁面適配

由于從iOS11開始引入了safeAreaInsets這個應該是老話題了,所以這里稍微提供下我自己的心得吧。

頁面是陪經常要寫個中判斷,代碼中時常需要用到safeAreaInsets或者判斷劉海屏等工具,所以我習慣在項目中寫一個UIManager的單例,這里面除了提供一些適配需要的屬性,還可以寫一下tableView適配等。

@interface DDUIManager : NSObject@property (nonatomic, assign, readonly) UIEdgeInsets safeAreaInset;/* * 是否是劉海屏 * */@property (nonatomic, assign, readonly) BOOL isHairHead;+ (instancetype)sharedManager;@end
@implementation DDUIManager- (UIWindow *)keyWindow {  return [UIApplication sharedApplication].keyWindow;}- (UIEdgeInsets)safeAreaInset {  if (@available(iOS 11.0, *)) {    if (self.keyWindow) {      return self.keyWindow.safeAreaInsets;    }  }  return UIEdgeInsetsZero;}- (BOOL)isHairHead {  if (UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)) {    return self.safeAreaInset.left > 0.0f;  }else {    // ios12 非劉海屏狀態欄 20.0f    return self.safeAreaInset.top > 20.0f;  }}@end

這樣寫除了使用方便以外,還避免了一部分關于系統的條件編譯等,因為safeAreaInset是iOS11才出的.而且在e lse中會返回UIEdgeInsetsZero,使得使用時可以省去一些if-else語句,例如:

適配,iPhoneXSmax,iPhoneXR

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 草莓福利社区在线 | 亚洲网站在线观看视频 | 看免费黄色大片 | 国产xxxx免费 | 在线成人免费观看www | 新久草在线视频 | 亚洲精品一区二区三区免 | 欧美女优一区 | 成人毛片100部 | 久久99精品久久久久久236 | 欧美精品成人一区二区在线观看 | 失禁高潮抽搐喷水h | 伊人二本二区 | 激情大乳女做爰办公室韩国 | 宅男噜噜噜66国产免费观看 | 国产88久久久国产精品免费二区 | 欧美精品久久久久久久多人混战 | 国产午夜精品一区二区三区不卡 | 在线观看免费视频麻豆 | 黄色影院在线观看视频 | 亚洲乱妇19p | 看一级大毛片 | 中文字幕亚洲一区二区三区 | 国产精品一区二区三区在线看 | 国产精品入口夜色视频大尺度 | 欧美成人一区免费视频 | 欧美成人免费小视频 | 亚洲性在线视频 | 国产久草视频在线 | 欧美a视频 | 色的综合 | 久久久久久片 | 97zyz成人免费视频 | 懂色av懂色aⅴ精彩av | 国产91在线高潮白浆在线观看 | av免费不卡国产观看 | 欧美一级片网站 | 亚洲免费资源 | 中国免费黄色 | 春光影院理论片 | 97中文字幕第一一一页 |