CC论坛

 找回密码
 立即注册
查看: 722|回复: 0

[iOS] 判断iPhone是否是刘海屏iPhoneX、iPhoneXR、iPhoneXs、iPh...

[复制链接]

56

主题

57

帖子

339

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
339
发表于 2020-2-18 22:17:54 | 显示全部楼层 |阅读模式
保证能判断,呕心沥血,不行切JIJI
方法一

Objective-C

  1. // iPhoneX、iPhoneXR、iPhoneXs、iPhoneXs Max等
  2. // 判断刘海屏,返回YES表示是刘海屏
  3. [list][*](BOOL)isNotchScreen {[/list]
  4.    
  5.     if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) {
  6.         return NO;
  7.     }
  8.    
  9.     CGSize size = [UIScreen mainScreen].bounds.size;
  10.     NSInteger notchValue = size.width / size.height * 100;
  11.    
  12.     if (216 == notchValue || 46 == notchValue) {
  13.         return YES;
  14.     }
  15.    
  16.     return NO;
  17. }
复制代码

<!--text-ad-->
Swift

  1. extension UIViewController {
  2.    
  3.     /// iPhoneX、iPhoneXR、iPhoneXs、iPhoneXs Max等
  4.     /// 判断刘海屏,返回true表示是刘海屏
  5.     ///
  6.     var isNotchScreen: Bool {
  7.         
  8.         if UIDevice.current.userInterfaceIdiom == .pad {
  9.             return false
  10.         }
  11.         
  12.         let size = UIScreen.main.bounds.size
  13.         let notchValue: Int = Int(size.width/size.height * 100)
  14.         
  15.         if 216 == notchValue || 46 == notchValue {
  16.             
  17.             return true
  18.         }
  19.         
  20.         return false
  21.     }
  22. }
复制代码

方法二

Objective-C

  1. // 如果是刘海屏
  2. if (self.view.safeAreaInsets.bottom > 0) {
  3.    // do something
  4.   }
复制代码

Swift

  1. // 如果是刘海屏
  2. if self.view.safeAreaInsets.bottom > 0 {
  3.    // do something
  4. }
复制代码

方法一与方法二比较

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

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|粤ICP备19105948号|CC论坛

GMT+8, 2022-12-4 18:51

快速回复 返回顶部 返回列表