利用Swift如何判断iPhone X机型详解

 更新时间:2017年09月18日 11:41:03   作者:TUALATRIX  
近日,iPhone X的发布在人们群众引起了很大的轰动,下面这篇文章主要给大家介绍了关于利用Swift如何判断iPhone X机型的相关资料,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧。
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

前言

Apple Special Event 已经结束,iPhone 三款新机型和技术细节也已完全暴露。可以说,发布会前泄漏了 95% 以上的信息,以致于发布会一点惊喜也没有。

尽管 iPhone 8 实际上只是 iPhone 7s,而 iPhone X 我们也早已对它非常熟悉——特别是刘海。无论是满意还是失望,作为 iOS 开发者的我,还是得积极的适配起这款面向未来的机型。

我将在一边适配的过程中,一边从技术角度更多地去理解这款机器。

奇点在 iPhone X 的 break

除非你的 App 全部使用了 iPhone 原生组件、AutoLayout 等等,否则我想它或多或少存在着在 iPhone X 上的兼容性问题。就拿奇点来说吧,早上我下载完 Xcode 9 GM,然后在 iPhone X 模拟器跑起了它,很快我就看到了 break:我自定义 TabBar 的问题。

上图可以看到,Home Indicator 和 TabBar 几乎混在了一块。

那么为什么会这样?这要和奇点稍微 Hack 过的 UITabBar 有关系。用过奇点的朋友应该知道,奇点的 TabBar 是没有文字的、纯图片的 TabBar,它的高度不是标准的 49,而是 44,我在 UITabBarController 的 viewWillLayoutSubviews 方法做了一个手动调整布局以达到这个效果。但很明显,这个 Hack 在 iPhone X 上不起作用了。

var tabFrame = self.tabBar.frame
tabFrame.size.height = MainTabBarController.tabBarHeight
tabFrame.origin.y = self.view.frame.size.height - MainTabBarController.tabBarHeight
self.tabBar.frame = tabFrame

解决 iPhone X 上的 TabBar 问题

解决这个问题也很简单,当我把 Hack 的代码注释掉以后就工作正常了。如图:

为保证奇点在 iOS 11 的其他机型上继续工作正常,我得写一个判断,只在 iPhone X 上禁用这个 Hack。

那么如何判断当前的设备是 iPhone X 呢?有好几种办法,可以考虑取得「iPhone 10,1」这样的 Module Name 来判断,也可以用屏幕分辨率的形式来判断。我觉得要用屏幕分辨率的方式来做,因为这是目前为止最简单也最不容易出错的。因为 iPhone X 只有一种分辨率,那就是 812pt x 375pt (@3x),且没有任何其他设备用了一样的分辨率,特别是高度。

于是写了一个基于 UIDevice 的扩展(或者其他任意方法也行):

extension UIDevice {
  public func isX() -> Bool {
    if UIScreen.main.bounds.height == 812 {
      return true
    }

    return false
  }
}

在代码中,就可以用 UIDevice.current.isX() 来判断是不是跑在 iPhone X 机型上,然后做一些或不做一些特殊的 Hack 了。

小结

奇点实际上还有各种各样在 iPhone X(甚至只是 iOS 11)上的小问题,大问题在过去的一段时间我差不多都解决了,我想这段时间我会不断地整理出一些技术文章来和大家分享。

总得来说,对于奇点这样的微博客户端,这次对 iOS 11 的适配,改动量非常大,以致于我有点不高兴。比如 Social 这个 Framework,Apple 居然把所有社交网络帐户分享的功能给去掉了,这使得奇点的「同步到 Twitter」这样的功能不能再调用系统的,只能自己重写。

另外,iOS 11 将 UINavigationBar 的自定义规范到了严格的程度,如果你有没有用 AutoLayout,或者 Custom TitleView 有问题,都会有很多意想不到的问题发生。

这些问题解决后,还有 iPhone X 这样的大问题等着我们去适配…

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对程序员之家的支持。

相关文章

  • Swift使用编解码库Codable的过程详解

    Swift使用编解码库Codable的过程详解

    Codable 是 Swift 引入的全新的编解码库,使开发者更方便的解析JSON 或 plist 文件,支持枚举、结构体和类,这篇文章主要介绍了Swift使用编解码库Codable,需要的朋友可以参考下
    2023-09-09
  • Swift高阶函数contains?allSatisfy?reversed?lexicographicallyPrecedes用法示例

    Swift高阶函数contains?allSatisfy?reversed?lexicographicallyPr

    这篇文章主要为大家介绍了Swift高阶函数contains?allSatisfy?reversed?lexicographicallyPrecedes用法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Swift 4最全的新特性详细解析(推荐)

    Swift 4最全的新特性详细解析(推荐)

    Swift 4 在 Swift 3 的基础上,提供了更强大的稳健性和稳定性。所以下面这篇文章就来给大家总结介绍关于Swift4新特性的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-11-11
  • iOS Swift读取本地json文件报错的解决方法

    iOS Swift读取本地json文件报错的解决方法

    只要是app开发者都知道,从服务器端获得的数据要不就是json格式的数据,要么就是xml格式的数据,而这篇文章主要给大家介绍了关于iOS Swift读取本地json文件报错的解决方法,需要的朋友可以参考借鉴,下面来一起学习学习吧。
    2017-11-11
  • 窥探Swift编程中的错误处理与异常抛出

    窥探Swift编程中的错误处理与异常抛出

    本文给大家整理些关于Swift编程中的错误处理与异常抛出,本文介绍的非常详细,基于参考价值,特此分享程序员之家平台供大家学习
    2016-02-02
  • swift4.0实现视频播放、屏幕旋转、倍速播放、手势调节及锁屏面板等功能实例

    swift4.0实现视频播放、屏幕旋转、倍速播放、手势调节及锁屏面板等功能实例

    这篇文章主要给大家介绍了关于swift4.0实现视频播放、屏幕旋转、倍速播放、手势调节及锁屏面板等功能的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-01-01
  • Swift教程之控制流详解

    Swift教程之控制流详解

    这篇文章主要介绍了Swift教程之控制流详解,本文详细讲解了Swift中的for循环、for-in循环、For-Condition-Increment条件循环、while循环、Do-while循环、if条件语句等控制流语句,需要的朋友可以参考下
    2015-01-01
  • Swift如何为设置中心添加常用功能

    Swift如何为设置中心添加常用功能

    这篇文章主要给大家介绍了关于Swift如何为设置中心添加常用功能的相关资料,包含了跳转到AppStore、邮件反馈功能、系统分享功能以及打开某些网址等功能,需要的朋友可以参考借鉴,下面来一起看看吧
    2018-05-05
  • Swift心得笔记之集合类型

    Swift心得笔记之集合类型

    本文为大家讲解的是swift语言中的集合类型数据,这是swift开发必须掌握的知识点,感兴趣的同学参考下。
    2015-04-04
  • Swift语言中的函数学习教程

    Swift语言中的函数学习教程

    这篇文章主要介绍了Swift语言中的函数学习教程,着重讲了Swift函数的参数传递用法,需要的朋友可以参考下
    2015-11-11

最新评论

?


http://www.vxiaotou.com