1. 程式人生 > >適配iPhoneX和Xcode9

適配iPhoneX和Xcode9

iPhone X的適配

1、iPhone X, 5.8 英寸,螢幕解析度為 1242 x 2800

除去底部固定的功能區,螢幕顯示範圍的尺寸為 5.15 英寸,458ppi。

豎屏尺寸:1125px × 2436px(375pt × 812pt @3x)

橫屏尺寸:2436px × 1125px(812pt × 375pt @3x)

iPhone 7 裝置渲染後分辨率為 750 x 1334,邏輯解析度只有 375 x 667。

iPhone X 裝置渲染後分辨率為 1125 x 2436,邏輯解析度是為 375 x 812。

所以 除去下巴的功能區,iPhone X與 4.7 寸的7同寬,但是高度多了一截。145pt,導致多出了大約 20%的垂直高度。

2、iPhone X機型判斷

 (1)、可以拿解析度來判斷。

#define iPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125,2436), [[UIScreen mainScreen] currentMode].size) : NO)

或者:

#define IS_IPHONEX (([[UIScreen mainScreen] bounds].size.height-812)?NO:YES)

 (2)、Devive Model

    if ([platform isEqualToString:@"iPhone10,1"]) return @"iPhone 8";
    if ([platform isEqualToString:@"iPhone10,4"]) return @"iPhone 8";
    if ([platform isEqualToString:@"iPhone10,2"]) return @"iPhone 8 Plus";
    if ([platform isEqualToString:@"iPhone10,5"]) return @"iPhone 8 Plus";
    if ([platform isEqualToString:@"iPhone10,3"]) return @"iPhone X";
    if ([platform isEqualToString:@"iPhone10,6"]) return @"iPhone X";

3、如果發現有的屬性沒有了,可以用runtime判斷一下再使用

(1).引入庫
include <objc/runtime.h>
(2).以系統物件為例,正常情況下我們無法檢視系統物件的私有屬性,如下方法可以得到其全部屬性。
以相簿的PHAsset為例:
for (PHAsset *asset inself.assetsFetchResults) {
    unsigned int count;
    // 獲取屬性列表
    objc_property_t *propertyList = class_copyPropertyList([asset class], &count);
    for (unsigned int i = 0; i<count; i++) {
        const char *propertyName = property_getName(propertyList[i]);
        NSLog(@"property----="">%@", [NSString stringWithUTF8String:propertyName]);
    }   
}

1、導航欄和tabbar

    iPhone X 的狀態列高度為 44 pt ,以前的手機為20 pt。經過我的測試,X 的 tabbar 以前為 49 pt,現在是 83,故高出了 34 pt。

2、Safe Area

在沒有狀態列和tabbar的 iPhone 8 裡,Safe Area 是指整個螢幕。加入狀態列後,Safe Area 便向下減少了 20 個點。當加入 Navigation 的時候,Safe Area 又減少了 44 個點。再加入 Tabbar 的時候,Safe Area 又減少了49 pt。

在 iPhone X 裡,當我們沒有使用狀態列時,Safe Area 依然和上下邊有一定的距離。按照我的測量,此時距離底部應該是 43 個點,距離頂部應該是 44 個點。同理,加入不同 Bar 之後,iPhone X 的 Safe Area 都會有相應的變化。

3、如何使用Safe Area

 (1)、在xib中選中 Use Safe Area LayOUT Guides 就可以了。

 (2)、程式碼:

if #available(iOS 11, *) {

let guide = view.safeAreaLayoutGuide

NSLayoutConstraint.activate([

greenView.topAnchor.constraintEqualToSystemSpacingBelow(guide.topAnchor, multiplier: 1.0),

guide.bottomAnchor.constraintEqualToSystemSpacingBelow(greenView.bottomAnchor, multiplier: 1.0)

])

}

4、TabBar高度拉伸、壓縮的問題

如果是那種自定義TabBar中間是按鈕的這種操作,我試了一下,之前中間按鈕的高度設定的是TabBar的高度( CGFloat buttonH = self.frame.size.height;),現在直接賦值,也可以解決這種問題 。CGFloat buttonH = 49;

二、iPhone X的底部

1、根據蘋果設計規範一般內容不應該覆蓋home鍵的地方。如圖:

但是如果展示的是TableView、CollectionView等滾動檢視內容的控制元件,應該讓這些控制元件填滿螢幕,也就是 要覆蓋下面的home鍵。如圖(以設定中的Safari設定為例):

內容的底部

有的app因為沒有設定iPhone X的閃圖,或者沒用storyboard做閃圖,會導致app開啟後頂部和底部 有很大的黑色空白,這樣是不對的。如圖:

Xcode9:

一、app不能全屏,上下各自有黑色空白

解決辦法:

直接用LaunchScreen.xib或者LaunchScreen.storyboard進行配置啟動圖,這樣app就能全屏了。

二、command鍵 點選滑鼠後預設彈出的是選擇列表

如果想command鍵復原。可在Preferences --&gt; Navigation --&gt;Commadn-click 中選擇Jumps to Defintion即可。

三、Xcode 9 打包時,記得在icon的新增1024*1024的圖示

四、無線聯調

雞肋的無線除錯功能(iPhone的電池...)可在Window --&gt;Devices and Simulators中勾選那兩個選項。前提是此裝置已run過並處於同一區域網下。

五、Asset新建顏色

在Asset中,可以建立顏色了。右鍵選擇New Color set,填充RGBA值或十六進位制值即可。使用中直接使用新的colorwithname,引數填入建立時的名字即可。不過記得區分系統版本。