关于WRNavigationBar在XS、XS_Max、XR导航栏高度异常的修复方案

栏目: IOS · 发布时间: 6年前

内容简介:WRNavigationBar 1.2.0版本在iPhone XS Max、iPhone XR上会出现导航栏高度异常的问题。以下代码只判断了iPhone X设备,所以在真机环境下iPhone XR、iPhone XS、iPhone XS Max会出现导航栏高度异常的问题,但作者在模拟器设备时对设备宽高做了判断,因此模拟器下iPhone XS是正常的。这里是将作者的根据设备判断改为根据状态栏高度判断,目前刘海屏状态栏高度都是44。

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,导航栏就正常了。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

大思维:集体智慧如何改变我们的世界

大思维:集体智慧如何改变我们的世界

杰夫·摩根 / 郭莉玲、尹玮琦、徐强 / 中信出版集团股份有限公司 / 2018-8-1 / CNY 65.00

智能时代,我们如何与机器互联,利用技术来让我们变得更聪明?为什么智能技术不会自动导致智能结果呢?线上线下群体如何协作?社会、政府或管理系统如何解决复杂的问题?本书从哲学、计算机科学和生物学等领域收集见解,揭示了如何引导组织和社会充分利用人脑和数字技术进行大规模思考,从而提高整个集体的智力水平,以解决我们时代的巨大挑战。是英国社会创新之父的洞见之作,解析企业、群体、社会如何明智决策、协作进化。一起来看看 《大思维:集体智慧如何改变我们的世界》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具