博客> iOS开发:判断iPhone是否是刘海屏iPhoneX、iPhoneXR、iPhoneXs、iPhoneXs Max等
iOS开发:判断iPhone是否是刘海屏iPhoneX、iPhoneXR、iPhoneXs、iPhoneXs Max等
2019-09-14 11:43 评论:0 阅读:701 yao7778899

保证能判断,呕心沥血,不行切JIJI

方法一


Objective-C

// iPhoneX、iPhoneXR、iPhoneXs、iPhoneXs Max等
// 判断刘海屏,返回YES表示是刘海屏
- (BOOL)isNotchScreen {

    if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) {
        return NO;
    }

    CGSize size = [UIScreen mainScreen].bounds.size;
    NSInteger notchValue = size.width / size.height * 100;

    if (216 == notchValue || 46 == notchValue) {
        return YES;
    }

    return NO;
}

Swift

extension UIViewController {

    /// iPhoneX、iPhoneXR、iPhoneXs、iPhoneXs Max等
    /// 判断刘海屏,返回true表示是刘海屏
    ///
    var isNotchScreen: Bool {

        if UIDevice.current.userInterfaceIdiom == .pad {
            return false
        }

        let size = UIScreen.main.bounds.size
        let notchValue: Int = Int(size.width/size.height * 100)

        if 216 == notchValue || 46 == notchValue {

            return true
        }

        return false
    }
}

方法二


Objective-C

 // 如果是刘海屏
 if (self.view.safeAreaInsets.bottom > 0) {
   // do something     
  }

Swift

 // 如果是刘海屏
 if self.view.safeAreaInsets.bottom > 0 {
   // do something         
 }

方法一与方法二比较


  • 方法一很明显的优势是代码少,缺点是依赖UIView实例,在一些非UI场景的逻辑处理中如果要判断刘海屏,就不是很友好,当然你也可以先获得当前View实例然后再判断, 还有一个问题就是在iPad上safeAreaInsets.bottom的值也是大于0,如果是通用APP就不适用了
  • 方法二代码多,这是缺点;优点是通用,不依赖UIView实例,可以在任何场景自由使用,在iPad/iPhone中可精准识别,无须做代码修改
  • 方法一与方法二共同的缺点就是,如果在子线程中调用,都要先切回主线程,否则会导致崩溃
  • 两种方法任君选择

更多文章请访问我的博客

收藏
0
sina weixin mail 回到顶部