zoukankan      html  css  js  c++  java
  • 判断iPhoneX适配问题

    最近在公司没事运行了之前写的一个项目,发现在iphonexs max上有问题,发现是我的刘海屏判断有问题,

    错误示例1:

    #define AskStatusBarHeight ([[UIApplication sharedApplication] statusBarFrame].size.height)

    #define Ask_IPHONE_X (kStatusBarHeight >= 44.0f)

    错误示例2:

    //判断iPhoneX

    #define IS_IPHONE_X ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) && !isPad : NO)

    //判断iPHoneXr

    #define IS_IPHONE_Xr ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(828, 1792), [[UIScreen mainScreen] currentMode].size) && !isPad : NO)

    //判断iPhoneXs

    #define IS_IPHONE_Xs ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) && !isPad : NO)

    //判断iPhoneXs Max

    #define IS_IPHONE_Xs_Max ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2688), [[UIScreen mainScreen] currentMode].size) && !isPad : NO)

    #define IS_IPHONE_XSR ((IS_IPHONE_X==YES || IS_IPHONE_Xr ==YES || IS_IPHONE_Xs== YES || IS_IPHONE_Xs_Max== YES) ? YES : NO)

    现在看看之前写的好蠢,后来发现在iOS11后更新了一个新方法:safeAreaInsets,然后又重新根据这个方法在网上找到了一个判断iOS 刘海平手机的方案:

    #define IPHONE_X (@available(iOS 11.0, *) ? [[[UIApplication sharedApplication] delegate] window].safeAreaInsets.bottom > 0.0 : NO )

    结果发现这样调用会报警告。

    正确的方案如下:

    #define IPHONE_X 

    ({BOOL isPhoneX = NO;

    if (@available(iOS 11.0, *)) {

    isPhoneX = [[UIApplication sharedApplication] delegate].window.safeAreaInsets.bottom > 0.0;

    }

    (isPhoneX);})

  • 相关阅读:
    2017年寒假作业(二)
    2017年寒假作业(一)
    JAVA类型转换
    两数之和(LeetCode)
    编程汇总
    赌神(赛码网基础算法题)
    个人作业——软件工程实践总结
    个人作业——软件产品案例分析
    交换队伍交接过程及个人心得
    软件工程结对作业第二次
  • 原文地址:https://www.cnblogs.com/FZP5/p/11155906.html
Copyright © 2011-2022 走看看