美文网首页适配iOS 的东西
适配之路 iOS 11 / iPhone X / Xcode 9

适配之路 iOS 11 / iPhone X / Xcode 9

作者: coding_Zhang | 来源:发表于2017-09-21 19:33 被阅读788次

    1. 升级Xcode 9后本地图片不能正确的显示 ?

    最近更新到Xcode9后,发现本地的图片都不能正常显示,后来发现如果是直接拉入到工程,Bundle Reources 里面并没有该资源图片,于是又手动添加了一遍,问题解决。如下 :

    image

    2. 由于iPhone X的状态栏结构发生了变化,此时利用系统状态栏判断网络状态的话会发生crash,如下

    UIApplication *app = [UIApplicationsharedApplication];
    NSArray *children = [[[appvalueForKeyPath:@"statusBar"] valueForKeyPath:@"foregroundView"] subviews];
    // .... 该方法在 iPhone X 上会crash
    

    改用ios 7 之后推出的currentRadioAccessTechnology来判断当前的网络,需要使用到系统

    import <CoreTelephony/CTTelephonyNetworkInfo.h> 框架里的内容。或者改用 Reachability来判断

    - (void)networkStatus {
        NSArray *typeStrings2G = @[CTRadioAccessTechnologyEdge,
                                   CTRadioAccessTechnologyGPRS,
                                   CTRadioAccessTechnologyCDMA1x];
        
        NSArray *typeStrings3G = @[CTRadioAccessTechnologyHSDPA,
                                   CTRadioAccessTechnologyWCDMA,
                                   CTRadioAccessTechnologyHSUPA,
                                   CTRadioAccessTechnologyCDMAEVDORev0,
                                   CTRadioAccessTechnologyCDMAEVDORevA,
                                   CTRadioAccessTechnologyCDMAEVDORevB,
                                   CTRadioAccessTechnologyeHRPD];
        
        NSArray *typeStrings4G = @[CTRadioAccessTechnologyLTE];
        
        if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
            CTTelephonyNetworkInfo *teleInfo= [[CTTelephonyNetworkInfo alloc] init];
            NSString *accessString = teleInfo.currentRadioAccessTechnology;
            if ([typeStrings4G containsObject:accessString]) {
                NSLog(@"4G网络");
            } else if ([typeStrings3G containsObject:accessString]) {
                NSLog(@"3G网络");
            } else if ([typeStrings2G containsObject:accessString]) {
                NSLog(@"2G网络");
            } else {
                NSLog(@"未知网络");
            }
        } else {
            NSLog(@"未知网络");
        }
    }
    

    参考: http://blog.csdn.net/u011619283/article/details/51899988

    3.导航栏高度的变化

    iOS11之前导航栏默认高度为64pt(这里高度指statusBar + NavigationBar),iOS11之后如果设置了prefersLargeTitles = YES则为96pt,默认情况下还是64pt,但在iPhoneX上由于刘海的出现statusBar由以前的20pt变成了44pt,所以iPhoneX上高度变为88pt,如果项目里隐藏了导航栏加了自定义按钮之类的,这里需要注意适配一下。

    最新官方设计指南: https://developer.apple.com/ios/human-interface-guidelines/overview/iphone-x/

    根据设备屏幕尺寸确定当前设备型号

    iphone 4/4s => {320, 480}

    iphone 5/5c/5s/SE => {320, 568}

    iphone 6/6s/7/8 => {375, 667}

    iphone 6p/6sp/7p/8p => {414, 736}

    iphone X => {375, 812}

    以下是写的一个分类,根据设备屏幕尺寸确定当前设备型号,利用屏幕尺寸判断iPhone X

    typedef NS_ENUM(NSInteger, zhDeviceType) {
        __IPHONE_4 = 0,
        __IPHONE_5,
        __IPHONE_6,
        __IPHONE_6P,
        __IPHONE_X,
        __UNKNOWN
    };
    
    @interface UIDevice (zhDeviceType)
    
    @property (class, nonatomic, assign, readonly) zhDeviceType deviceType;
    
    @end
    
    @implementation UIDevice (zhDeviceType)
    
    + (zhDeviceType)deviceType {
       
        NSString *stringSize = NSStringFromCGSize([UIScreen mainScreen].bounds.size);
        
        if ([stringSize isEqualToString:@"{320, 480}"]) { // iphone 4/4s
            return __IPHONE_4;
        } else if ([stringSize isEqualToString:@"{320, 568}"]) { // iphone 5/5c/5s/SE
            return __IPHONE_5;
        } else if ([stringSize isEqualToString:@"{375, 667}"]) { // iphone 6/6s/7/8
            return __IPHONE_6;
        } else if ([stringSize isEqualToString:@"{414, 736}"]) { // iphone 6p/6sp/7p/8p
            return __IPHONE_6P;
        } else if ([stringSize isEqualToString:@"{375, 812}"]) { // iphone X
            return __IPHONE_X;
        } else {
            return __UNKNOWN;
        }
    }
    
    @end
    

    导航栏高度

    // 根据设备获取导航栏高度 (正常情况下)
    static inline CGFloat CGStatusBarHeight () { 
        return [NSStringFromCGSize([UIScreen mainScreen].bounds.size) isEqualToString:@"{375, 812}"] ? 44 : 20;
    }
    

    参考资料

    相关文章

      网友评论

        本文标题:适配之路 iOS 11 / iPhone X / Xcode 9

        本文链接:https://www.haomeiwen.com/subject/pvutextx.html