本文主要简单谈谈并收集一些关于 iOS 11 & iPhone X 的适配及设计指南。

iPhone X

众所周知,iPhone X 屏幕与其他的 iPhone 设备均不同,苹果称 iPhone X 的屏幕为超级视网膜显示屏。

  • 在 iPhone X 上 1pt 相当于 3x3 px,也就是我们常说的 @3x,同 Plus 机型。

  • iPhone X 的屏幕尺寸为 375x812 pt(即 1125×2436 pix)。iPhone X 比 4.7 寸机型屏幕多出 145 pt。

  • iPhone X 最引人注意的就是它的屏幕,没错...带刘海的屏幕。至于适配问题,本文不做过多解说,本文末尾会给出相关资料。

Don't mask or call special attention to key display features. Don't attempt to hide the device's rounded corners, sensor housing, or indicator for accessing the Home screen by placing black bars at the top and bottom of the screen. Don't use visual adornments like brackets, bezels, shapes, or instructional text to call special attention to these areas either.

注意:根据 Human Interface Guidelines for iPhone X 规范,不要试图去隐藏屏幕的圆角、刘海等。前段时间 GitHub 上小火了一个 Swift 库 NotchKit,专门用于隐藏 iPhone X 的刘海。笔者建议先别急着集成公司项目,这种做法可能会被苹果拒绝(违反了 HIG 条例),不过小伙们可以集成至个人项目提交审核试试。

安全区域(SafeArea)

无导航栏时

竖屏

竖屏情况下并且无导航栏时,上下安全边距分别为 44pt/34pt,即安全区域宽高为 375pt/734pt。

横屏

横屏情况下并且无导航栏时,上下安全边距分别为 0pt/21pt,左右安全边距为 44pt/44pt,即安全区域宽高为 724pt/354pt。

有导航栏时

在 iOS 11 中导航栏有个新特性 —— 大标题,直接上代码:

Objective-C:


if (@available(iOS 11.0, *)) {
self.navigationController.navigationBar.prefersLargeTitles = YES;
self.navigationController.navigationItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeAutomatic;
}

Swift:


if #available(iOS 11.0, *) {
navigationController?.navigationBar.prefersLargeTitles = largeTitle
navigationController?.navigationItem.largeTitleDisplayMode = .automatic
}

竖屏

当没有开启大标题且有导航栏时,上下安全边距分别为 88pt/34pt,即安全区域宽高为 375pt/690pt。

开启大标题时,上下安全边距分别为 140pt/34pt,即安全区域宽高为 375pt/638pt。

横屏

不管有没有开启大标题,横盘状态下一样,上下安全边距分别为 32pt/21pt,左右安全边距为 44pt/44pt,即安全区域宽高为 724pt/322pt。

机型尺寸

定位相关

在 iOS 11 中必须支持 When In Use 授权模式(NSLocationWhenInUseUsageDescription),在 iOS 11 中,为了避免开发者只提供请求 Always 授权模式这种情况,加入此限制,如果不提供When In Use 授权模式,那么 Always 相关授权模式也无法正常使用。

如果要支持老版本,即 iOS 11 以下系统版本,那么建议在 info.plist 中配置所有的 Key(即使 NSLocationAlwaysUsageDescription 在 iOS 11及以上版本不再使用):

  • NSLocationWhenInUseUsageDescription
  • NSLocationAlwaysAndWhenInUseUsageDescription
  • NSLocationAlwaysUsageDescription

NSLocationAlwaysAndWhenInUseUsageDescription 为 iOS 11 中新引入的一个 Key。

资料集

  1. iPhone X HIG
  2. Adaptivity & Layout
  3. Image size & Resolution
  4. WWDC17: What's New in Location Technologies ?
  5. Designing for iPhone X
  6. Building Apps for iPhone X
  7. 关于iPhone X 的适配
  8. iOS11 & iPhone X 适配指南
  9. 你可能需要为你的 APP 适配 iOS 11
  10. 适配iOS11,适配iPhoneX,适配安全区的几个文章和宏
  11. 为 iOS 11 适配工具栏(UIToolBar)
  12. 简书 App 适配 iOS 11
  13. iOS 安全区域适配总结
  14. Update Apps for iPhone X
  15. 手管 iPhone X 的适配总结

iOS 11 & iPhone X 适配资料集的更多相关文章

  1. 适配 iOS 11 & iPhone X 大全

    1.升级iOS11后造成的变化 1. 1升级后,发现某个拥有tableView的界面错乱,组间距和contentInset错乱,因为iOS11中UIViewController的automatical ...

  2. 《iOS 11 安全区域适配总结》

    本文来自于腾讯Bugly公众号(weixinBugly),作者:sonialiu,未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/W1_0VrchCO50owhJ ...

  3. iOS 11 安全区域适配

    //解决iOS11,仅实现heightForHeaderInSection,没有实现viewForHeaderInSection方法时,section间距大的问题 [UITableView appea ...

  4. IOS学习——iphone X的适配

    说实话,对于一个刚入门iOS两个月的新手而言,在拿到这个任务的时候整个人都是懵逼的,怎么做适配?哪些地方需要适配?该怎么做?一个个问题搞得头都大了. 首先,啥都不管,先在iPhone X上运行起来看看 ...

  5. 58 同城 iOS 客户端 iOS11 及 iPhone X 适配实践

    一.前言 前段时间 WWDC 大会上苹果推出了 iOS11 系统 和 iPhone X 新机型,相信各个 iOS 团队的开发者都已经在计划新系统和新机型的适配工作了.不得不说,新系统和新机型的发布确实 ...

  6. iOS 11适配

    1.http://www.cocoachina.com/ios/20170915/20580.html   简书App适配iOS 11   2.http://www.jianshu.com/p/efb ...

  7. iOS 11和xcode9

    最近发现了比较奇怪的问题,就是 ios10.几以前的版本,用xcode9 编写的程序   如果程序写的table是  plain的  ,那么  在  ios10.几及以下版本都会显示成group样式, ...

  8. iOS 11更新后以及iPhone X推出后工程中遇到的问题及适配

    1.UITableView滑动时右侧的滑动条忽长忽短的乱跳以及MJRefresh上拉刷新死循环 这是因为tableView在iOS11默认使用Self-Sizing,tableView的estimat ...

  9. iPhone X 适配 ( iOS 11适配 )

    总结: 1.状态栏高度发生变化,解决方案:布局的时候这个高度不要写死,通过方法获取高度. 2.导航栏的视图层级结构发生变化而导致 UI(titleView.UIBarButtonItem) 问题. 3 ...

随机推荐

  1. 201521123084 《Java程序设计》第8周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1.2 选做:收集你认为有用的代码片段 2. 书面作业 本次作业题集集合 1. List中指定元素的删除(题目 ...

  2. 四则运算题目生成程序(基于控制台)(Bug修改)

    针对上个程序中出现的bug进行修改 https://git.coding.net/cx873230936/calculator.git Bug: 1.控制台输入问题数问题 a.不能处理用户输入负数. ...

  3. 201521123122 《java程序设计》 第四周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 这个思维导图比较简单,详细内容点击此处 2. 书面作业 注释的应用 使用类的注释与方法的注释 ...

  4. 201521123063 《Java程序设计》第13周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 网络通讯的两种方式 TCP方式:类似于打电话,能够建立专门的虚拟连接,数据传输可靠 UDP方式:类似与发短 ...

  5. 201521123056 《Java程序设计》第14周学习总结

    1. 本周学习总结 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自己的学号.姓名) 在自己建立的数据库上执行常见SQL语句(截图) 参 ...

  6. 传统编程和IoC的对比

    ref:http://www.importnew.com/13619.html 传统编程:决定使用哪个具体的实现类的控制权在调用类本身,在编译阶段就确定了. IoC模式:调用类只依赖接口,而不依赖具体 ...

  7. Hadoop的safeMode

    当集群启动的时候,会首先进入到安全模式.系统在安全模式下,会检查数据块的完整性.假设我们设置的副本数(即参数dfs.replication)是5,那么在dataNode上就应该有5个副本存在,假设只存 ...

  8. NSTimer、CADisplayLink 内存泄漏

    NSTimer.CADisplayLink 内存泄漏 内存泄漏的原因 CADisplayLink 要用 Taget 和 Selector 初始化,NSTimer 也可以用类似的方法初始化.这样初始化之 ...

  9. Spring定时器的使用详解

    写个最简单的demo吧,反正睡前没什么事儿,来祸害一下园子~~虽然我菜,但是我不会承认啊,哈哈哈 明天详细补充点儿吧,很晚了,不睡觉的程序员不是好程序员,我总能给自己找借口~~~ //spring开启 ...

  10. 【JVM命令系列】jstack

    jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使 ...