iPhoneX 相关适配

说明: 目前调整的项目是基于纯代码构建.

整体调整

由于项目是基于 UITabBarController + UINavigationController 搭建的, 所以整体的 UI 适配包括两部分. 首先, 基于 UITabBarController 的几个主页面的高度是实际的屏幕高度, 其次, 其它子页面的高度为: 实际屏幕的高度 - 34 . 这样子页面底部就留出了 34 的安全距离.

一、UITabBarController 高度
// _SCREEN_HEIGHT 为实际屏幕高度
tabBarCtrl.view.frame = CGRectMake(0, 0, GET_CUR_DEVICE_WIDTH, _SCREEN_HEIGHT);
二、宏定义

iPhoneX 的适配主要是高度的适配, StatusBar 相关调整 . 主要是在 GlobalMacro.h 中定义以下宏来兼容处理.

#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) // 用于其它特殊页面调整
  1. 高度的适配
    原理: 通过宏 iPhoneX 判定是否是 iPhoneX 设备, 然后作相应处理.

    • iPhoneX: UISCREEN_HEIGHT = 实际屏幕的高度 - 34
    • 其它: UISCREEN_HEIGHT = 实际屏幕的高度
  2. StatusBar
    StatusBar 主要是高度的调整, iPhoneX 为 44 , 其它设备 20.

  3. TabBar 线条处理
    首页 tabBarCtrl 的 tabBar 默认高度为 83 , 原来 tabBar 的背景图高度只有 49, 所以会出现一条线条.

线条

解决: 将 TabBar 的背景图片拉伸

UIImage *imamge = [UIImage imageFileNamed:@"tabNewBar"];
[tabBarCtrl.tabBar setBackgroundImage:[imamge stretchableImageWithLeftCapWidth:20 topCapHeight:20]];
三、适配后的页面
首页
子页面

启动图, 引导图替换

原有尺寸不能满足要求, 需提供尺寸为 1125px × 2436px 的图片. 否则启动出现上下有黑条的情况.


启动图

启动图片代码更改

iPhone X 对应的启动图名称为"LaunchImage-1100-Portrait-2436h@3x.png".

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

根据状态栏获取网络状态

iPhone X 的状态栏发生了很大变化, 原来通过方法 getNetWorkStates 获取网络状态已经失效. 也曾试图通过 runtime 去获取, 但最终以失败告终. 目前的处理方式是做兼容处理, iPhone X 使用三方框架 RealReachability , 其它设备还是沿用以前的方式.

+(NSString *)getNetWorkStates
{
    UIApplication *app = [UIApplication sharedApplication];
    NSArray *children = [[[app valueForKeyPath:@"statusBar"]valueForKeyPath:@"foregroundView"]subviews];
    NSString *state = @"-1";
    int netType = 0;
    //获取到网络返回码
    for (id child in children) {
        if ([child isKindOfClass:NSClassFromString(@"UIStatusBarDataNetworkItemView")]) {
            //获取到状态栏
            netType = [[child valueForKeyPath:@"dataNetworkType"]intValue];
            
            switch (netType) {
                case 0:
                    //无网模式
                    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 时没有设置 font

iPhone X Push过程中TabBar位置上移

在UINavigationController的基类重写pushViewController代理方法,在Push的时候修正一下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;
}

使用新编译器时无法识别自定义宏

Xcode 9 ,使用 new build system 时 pch 文件无法识别其中导入的头文件, 暂时未找到解决办法.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,175评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,674评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,151评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,597评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,505评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,969评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,455评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,118评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,227评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,213评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,214评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,928评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,512评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,616评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,848评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,228评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,772评论 2 339

推荐阅读更多精彩内容

  • 相信大家已经被iPhoneX的刘海洗脑了,除了吐槽,留给我们的还有比较麻烦的适配工作。下面针对在整理过程中发现的适...
    smile丽语阅读 4,804评论 6 21
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,241评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,555评论 18 139
  • Swift版本点击这里欢迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh阅读 25,234评论 7 249
  • 最近几天总是在半夜醒来,脑子里总是有一个很久很久之前的名字盘旋着。打开灯,泡杯热茶捧在掌心,坐在窗边望着楼下的大...
    旧梦烟雨生阅读 321评论 0 0