美文网首页iOS经典收藏dev_iCode-iOS 专题
WRNavigationBar 1.2.0版本在iPhone X

WRNavigationBar 1.2.0版本在iPhone X

作者: dev_iCode | 来源:发表于2019-10-25 14:07 被阅读0次

    WRNavigationBar 1.2.0版本在iPhone XS Max、iPhone XR上会出现导航栏高度异常的问题。

    导航栏异常的原因 

    以下代码只判断了iPhone X设备,所以在真机环境下iPhone XR、iPhone XS、iPhone XS Max会出现导航栏高度异常的问题,但作者在模拟器设备时对设备宽高做了判断,因此模拟器下iPhone XS是正常的。 

    + (BOOL)isIphoneX {    struct utsname systemInfo;    uname(&systemInfo);    NSString *platform = [NSString stringWithCString:systemInfo.machine encoding:NSASCIIStringEncoding];    if ([platform isEqualToString:@"i386"] || [platform isEqualToString:@"x86_64"]) {        // judgment by height when in simulators        return (CGSizeEqualToSize([UIScreen mainScreen].bounds.size, CGSizeMake(375, 812)) ||                CGSizeEqualToSize([UIScreen mainScreen].bounds.size, CGSizeMake(812, 375)));    }    BOOL isIPhoneX = [platform isEqualToString:@"iPhone10,3"] || [platform isEqualToString:@"iPhone10,6"];    return isIPhoneX;}

    解决办法 

    1、找到WRNavigationBar.m文件,打开。 

    2、找到isIphoneX方法 

    + (BOOL)isIphoneX {    struct utsname systemInfo;    uname(&systemInfo);    NSString *platform = [NSString stringWithCString:systemInfo.machine encoding:NSASCIIStringEncoding];    if ([platform isEqualToString:@"i386"] || [platform isEqualToString:@"x86_64"]) {        // judgment by height when in simulators        return (CGSizeEqualToSize([UIScreen mainScreen].bounds.size, CGSizeMake(375, 812)) ||                CGSizeEqualToSize([UIScreen mainScreen].bounds.size, CGSizeMake(812, 375)));    }    BOOL isIPhoneX = [platform isEqualToString:@"iPhone10,3"] || [platform isEqualToString:@"iPhone10,6"];    return isIPhoneX;}

    3、将其修改为以下内容,直接复制即可 

    + (BOOL)isIphoneX {    if ([UIApplication sharedApplication].statusBarFrame.size.height == 44) {        return YES;    }    else {        return NO;    }}

    这里是将作者的根据设备判断改为根据状态栏高度判断,目前刘海屏状态栏高度都是44。

    4、这里有个注意点 

    Q: 将isIphoneX方法的实现修改后,下面的判断无法返回正确的数值

    + (CGFloat)navBarBottom {    return [self isIphoneX] ? 88 : 64;}+ (CGFloat)tabBarHeight {    return [self isIphoneX] ? 83 : 49;}

    A: 将判断改写即可

    + (CGFloat)navBarBottom {   

        if ([self isIphoneX]) {        return 88;    }    else {        return 64;    }}+ (CGFloat)tabBarHeight {    if ([self isIphoneX]) {        return 83;    }    else {        return 49;    }}

    如果没出现问题,请无视,理论上也不应该出现问题的。

    Q: 修改代码后,运行app导航栏高度还是错误的,且clean项目还是无效

    A: 使用cleanmymac将Xcode里的数据清除,重新编译运行app,导航栏就正常了。

    相关文章

      网友评论

        本文标题:WRNavigationBar 1.2.0版本在iPhone X

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