保证能判断,呕心沥血,不行切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中可精准识别,无须做代码修改
  • 方法一与方法二共同的缺点就是,如果在子线程中调用,都要先切回主线程,否则会导致崩溃
  • 两种方法任君选择

更多文章请访问我的博客

iOS开发:判断iPhone是否是刘海屏iPhoneX、iPhoneXR、iPhoneXs、iPhoneXs Max等的更多相关文章

  1. iOS - iPhone屏幕适配/启动图适配/APP图标适配(iPhone最全尺寸包含iPhoneX/XR/XS/XS Max等)

    趁iPhone新品还没有发布,先整理一下屏幕适配.启动图适配.APP图标适配的笔记,方便以后查阅: 注:部分图片来源于网络 违删; (一)iPhone屏幕适配: (1)屏幕分辨率: ①设计尺寸规范(表 ...

  2. IOS开发之--iPhone XR,iPhone XS Max适配

    因为iPhone X和iPhone XS的尺寸比是一样的,只需要把这两张图片补上就行. 具体原理性的东西就多说了,因为iPhoneX系列都一样,本文只说明一下具体怎么做,要适配屏幕,首先得让他以正确的 ...

  3. iOS开发 代码 或 <Home+Power>截屏

      1. 截屏的两种简单方法, 注意这两种截图方法,都必须在视图完全加载完成后才能截图,即在 viewDidAppear 方法之后截屏,否则无法得到想要的截屏效果 (1) 利用绘图方法 renderI ...

  4. iOS开发 判断当前APP版本和升级

    从iOS8系统开始,用户可以在设置里面设置在WiFi环境下,自动更新安装的App.此功能大大方便了用户,但是一些用户没有开启此项功能,因此还是需要在程序里面提示用户的 方法一:在服务器接口约定对应的数 ...

  5. iOS开发之如何修改Mac截屏保存路径

    如何修改Mac截屏保存路径   MAC OS X系统默认的截图路径是桌面文件夹,默认的截图格式是 PNG 图片格式,如何自定义设置呢? 截图保存路径 打开终端(Terminal)并输入如下命令: de ...

  6. iOS开发——判断邮箱格式

    //判断邮箱格式 -(BOOL)isValidateEmail:(NSString *)email { NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@ ...

  7. iOS开发——判断是否第一次启动

    在我们做项目的时候,判断是否是第一次启动,还是比较常用的,比如,欢迎界面,只是第一次启动需要的调查问卷等等,目的明确,方法很多,这里介绍一种简单的. 在你需要只有第一次启动才跳转的地方写上 if(![ ...

  8. iOS开发判断手机号及其运营商

    根据三大运营商出现的号段(号段来自百度百科) 判断是否是手机号 + (BOOL)isMobile:(NSString *)str { NSString *MOBILE = @"^1(3[0- ...

  9. javascript判断iphone/android手机横竖屏模式的函数

    function orientationChange(){ switch(window.orientation) { case 0: // Portrait case 180: // Upside-d ...

随机推荐

  1. Vue axios 跨域访问Session,两次得到的Session不是同一个Session

    这个问题是因为,后台无法确认你是同一个“人”访问服务器,两次访问都给了你一个全新的Session,所以第一次保存的信息第二次请求无法得到,我的理解是,在跨域中,携带Cookie信息访问,即可让服务器确 ...

  2. python 面向对象静态方法、类方法、属性方法、类的特殊成员方法

    静态方法:只是名义上归类管理,实际上在静态方法里访问不了类或实例中的任何属性. 在类中方法定义前添加@staticmethod,该方法就与类中的其他(属性,方法)没有关系,不能通过实例化类调用方法使用 ...

  3. PHP正则表达式-修饰符

    我们在PHP正则表达式的学习中会碰到修饰符,那么关于PHP正则表达式修饰符的理解以及使用我们需要注意什么呢?那么我们来具体的看看它的概念以及相关内容.在学习PHP正则表达式修饰符之前先来理解下贪婪模式 ...

  4. VSCode通过git上传代码

    最近也是在不断学习中,接触VSCode时间不长,很多东西也是在学习,所以这里记录下VSCode通过git上传代码,以防之后忘记. 我用的的VSCode版本 起初建立仓库的时候通过命令:(这个是我网上搜 ...

  5. AJAX学习小结

    12345678910 $.ajax({ "url":"", //访问路径 "data":"", // 需要传输的数据 ...

  6. [置顶] 利用Python 提醒实验室同学值日(自动发送邮件)

    前言: 在实验室里一直存在着一个问题,就是老是有人忘记提醒下一个人值日,然后值日就被迫中断了.毕竟良好的        卫生环境需要大家一起来维护的!没办法只能想出一些小对策了. 解决思路: 首先,我 ...

  7. CSS——NO.5(格式化排版)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  8. Python——1变量和数据类型(内含其他知识点链接)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  9. mongoDb性能提升

    最近在弄MongoDB的时候 发现只按照官网的方式进行操作的话,性能不行,想着用单例模式封装一下,提升一下性能,代码如下: //引入mongodb相关的模块 const MongoClient = r ...

  10. Angular 1 深度解析:脏数据检查与 angular 性能优化

    TL;DR 脏检查是一种模型到视图的数据映射机制,由 $apply 或 $digest 触发. 脏检查的范围是整个页面,不受区域或组件划分影响 使用尽量简单的绑定表达式提升脏检查执行速度 尽量减少页面 ...