iPhoneX 相關(guān)適配

說(shuō)明: 目前調(diào)整的項(xiàng)目是基于純代碼構(gòu)建.

整體調(diào)整

由于項(xiàng)目是基于 UITabBarController + UINavigationController 搭建的, 所以整體的 UI 適配包括兩部分. 首先, 基于 UITabBarController 的幾個(gè)主頁(yè)面的高度是實(shí)際的屏幕高度, 其次, 其它子頁(yè)面的高度為: 實(shí)際屏幕的高度 - 34 . 這樣子頁(yè)面底部就留出了 34 的安全距離.

一、UITabBarController 高度
// _SCREEN_HEIGHT 為實(shí)際屏幕高度
tabBarCtrl.view.frame = CGRectMake(0, 0, GET_CUR_DEVICE_WIDTH, _SCREEN_HEIGHT);
二、宏定義

iPhoneX 的適配主要是高度的適配, StatusBar 相關(guān)調(diào)整 . 主要是在 GlobalMacro.h 中定義以下宏來(lái)兼容處理.

#define iPhoneX_HEIGHT 812
#define iPhoneX (_SCREEN_HEIGHT == iPhoneX_HEIGHT)
#define UISCREEN_HEIGHT (iPhoneX ? ([[UIScreen mainScreen] bounds].size.height-34) : ([[UIScreen mainScreen] bounds].size.height))
#define _STATUS_BAR_HEIGHT (iPhoneX ? 44 : 20)
#define iPhoneXSafeDelta (iPhoneX ? 34 : 0) // 用于其它特殊頁(yè)面調(diào)整
  1. 高度的適配
    原理: 通過(guò)宏 iPhoneX 判定是否是 iPhoneX 設(shè)備, 然后作相應(yīng)處理.

    • iPhoneX: UISCREEN_HEIGHT = 實(shí)際屏幕的高度 - 34
    • 其它: UISCREEN_HEIGHT = 實(shí)際屏幕的高度
  2. StatusBar
    StatusBar 主要是高度的調(diào)整, iPhoneX 為 44 , 其它設(shè)備 20.

  3. TabBar 線條處理
    首頁(yè) tabBarCtrl 的 tabBar 默認(rèn)高度為 83 , 原來(lái) tabBar 的背景圖高度只有 49, 所以會(huì)出現(xiàn)一條線條.

線條

解決: 將 TabBar 的背景圖片拉伸

UIImage *imamge = [UIImage imageFileNamed:@"tabNewBar"];
[tabBarCtrl.tabBar setBackgroundImage:[imamge stretchableImageWithLeftCapWidth:20 topCapHeight:20]];
三症昏、適配后的頁(yè)面
首頁(yè)
子頁(yè)面

啟動(dòng)圖, 引導(dǎo)圖替換

原有尺寸不能滿足要求, 需提供尺寸為 1125px × 2436px 的圖片. 否則啟動(dòng)出現(xiàn)上下有黑條的情況.


啟動(dòng)圖

啟動(dòng)圖片代碼更改

iPhone X 對(duì)應(yīng)的啟動(dòng)圖名稱為"LaunchImage-1100-Portrait-2436h@3x.png".

if (iPhoneX) launchImageName = @"LaunchImage-1100-Portrait-2436h@3x.png";

根據(jù)狀態(tài)欄獲取網(wǎng)絡(luò)狀態(tài)

iPhone X 的狀態(tài)欄發(fā)生了很大變化, 原來(lái)通過(guò)方法 getNetWorkStates 獲取網(wǎng)絡(luò)狀態(tài)已經(jīng)失效. 也曾試圖通過(guò) runtime 去獲取, 但最終以失敗告終. 目前的處理方式是做兼容處理, iPhone X 使用三方框架 RealReachability , 其它設(shè)備還是沿用以前的方式.

+(NSString *)getNetWorkStates
{
    UIApplication *app = [UIApplication sharedApplication];
    NSArray *children = [[[app valueForKeyPath:@"statusBar"]valueForKeyPath:@"foregroundView"]subviews];
    NSString *state = @"-1";
    int netType = 0;
    //獲取到網(wǎng)絡(luò)返回碼
    for (id child in children) {
        if ([child isKindOfClass:NSClassFromString(@"UIStatusBarDataNetworkItemView")]) {
            //獲取到狀態(tài)欄
            netType = [[child valueForKeyPath:@"dataNetworkType"]intValue];
            
            switch (netType) {
                case 0:
                    //無(wú)網(wǎng)模式
                    state = @"-1";
                    [NSGlobe getEngine].netStatus = NotReachable;
                    break;
                case 1:
                    state = @"2G";
                    [NSGlobe getEngine].netStatus = ReachableVia2G;
                    break;
                case 2:
                    state = @"3G";
                    [NSGlobe getEngine].netStatus = ReachableVia3G;
                    break;
                case 3:
                    state = @"4G";
                    [NSGlobe getEngine].netStatus = ReachableVia4G;
                    break;
                case 4:
                    state = @"LTE";
                    [NSGlobe getEngine].netStatus = ReachableViaLTE;
                    break;
                case 5:
                    state = @"WIFI";
                    [NSGlobe getEngine].netStatus = ReachableViaWiFi;
                    break;
                default:
                    break;
            }
            break;
        }
    }
    return state;
}

字體變大

使用 UITableViewCell 時(shí)沒(méi)有設(shè)置 font

iPhone X Push過(guò)程中TabBar位置上移

在UINavigationController的基類(lèi)重寫(xiě)pushViewController代理方法,在Push的時(shí)候修正一下TabBar的frame

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if (self.viewControllers.count > 0) {
            viewController.hidesBottomBarWhenPushed = YES;
        }
    [super pushViewController:viewController animated:animated];
    // 修改tabBra的frame
    CGRect frame = self.tabBarController.tabBar.frame;
    frame.origin.y = [UIScreen mainScreen].bounds.size.height - frame.size.height;
    self.tabBarController.tabBar.frame = frame;
}

使用新編譯器時(shí)無(wú)法識(shí)別自定義宏

Xcode 9 ,使用 new build system 時(shí) pch 文件無(wú)法識(shí)別其中導(dǎo)入的頭文件, 暫時(shí)未找到解決辦法.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末过牙,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子纺铭,更是在濱河造成了極大的恐慌寇钉,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舶赔,死亡現(xiàn)場(chǎng)離奇詭異扫倡,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)竟纳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)撵溃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人锥累,你說(shuō)我怎么就攤上這事缘挑。” “怎么了桶略?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵语淘,是天一觀的道長(zhǎng)鬼悠。 經(jīng)常有香客問(wèn)我,道長(zhǎng)亏娜,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任蹬挺,我火速辦了婚禮维贺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘巴帮。我一直安慰自己溯泣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布榕茧。 她就那樣靜靜地躺著垃沦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪用押。 梳的紋絲不亂的頭發(fā)上肢簿,一...
    開(kāi)封第一講書(shū)人閱讀 51,231評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音蜻拨,去河邊找鬼池充。 笑死,一個(gè)胖子當(dāng)著我的面吹牛缎讼,可吹牛的內(nèi)容都是我干的收夸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼血崭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼卧惜!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起夹纫,我...
    開(kāi)封第一講書(shū)人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤咽瓷,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后捷凄,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體忱详,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年跺涤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了匈睁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡桶错,死狀恐怖航唆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情院刁,我是刑警寧澤糯钙,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響任岸,放射性物質(zhì)發(fā)生泄漏再榄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一享潜、第九天 我趴在偏房一處隱蔽的房頂上張望困鸥。 院中可真熱鬧,春花似錦剑按、人聲如沸疾就。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)猬腰。三九已至,卻和暖如春猜敢,著一層夾襖步出監(jiān)牢的瞬間姑荷,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工缩擂, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留厢拭,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓撇叁,卻偏偏與公主長(zhǎng)得像供鸠,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子陨闹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容