2019独角兽企业重金招聘Python工程师标准>>>

苹果终于在一年一度的秋季发布会发布了 iPhone 十周年纪念版:iPhone X。

iPhone X 是 2014 发布 iPhone 6 之后又一次外形的变化,也是 iPhone 历史上(可能)最大的一次外观变化。

我相信很多开发者和设计师看到 iPhone X 的这个「天猫内定」屏幕的时候心里十分苦恼:该怎么为这个机型做设计和适配?这篇文章从苹果的 iPhone X 开发和设计指南出发,试图来解决这个问题。

需要注意的是,本文不对设计指南完整的、不保留的搬运,而是根据指南和个人实操,做出的结论。完整的内容请自行查看文末链接。如有错误欢迎指出。

先抛数据

iPhone X 采用了 2436*1125 分辨率,拥有一块大约 2.17:1 的屏幕。iPhone X 的屏幕像素比 iPhone 8 高出 145 pt。适配 iPhone X 时并不需要像传闻的一样使用 @4x 的素材,而是继续使用 @3x 即可。苹果鼓励我们使用 PDF 素材来缩小包大小。


iPhone X 的状态栏高度为 44 pt ,iPhone 8 和 iPhone 8 Plus 和以前一样为 20 点。经过我的测试,X 的 tabbar 比以前高出 43 个点(以前是 40,现在是 83)。需要注意的是,横屏时底部高度为 33 pt。这个数据可以用于底部适配,下文会讨论这个话题。

Safe Area

iOS 11 为屏幕适配引入了一个十分重要的概念:Safe Area.

顾名思义,Safe Area 指的是屏幕内适合放置控件的安全区域。概念太模糊,下面举例说明:

在没有状态栏和其他东西的 iPhone 8 里,Safe Area 是指整个屏幕。

当加入状态栏后,Safe Area 便向下减少了 20 个点。当我们加入 Navigation 的时候,Safe Area 又减少了 44 个点。同理,我们再加入 Tabbar 的时候,Safe Area 又减少了 44 个点。

在 iPhone X 里,当我们没有使用状态栏时,Safe Area 依然和上下边有一定的距离。按照我的测量,此时距离底部应该是 43 个点,距离顶部应该是 44 个点。

同理,加入不同 Bar 之后,iPhone X 的 Safe Area 都会有相应的变化。

横屏时, iPhone X 的 Safe Area 与左右和下部都有距离。需要注意的时,像 TableView 这样的控件,需要将它的 Cell ContentView 与 Safe Area 对齐,而把 TableView 内容扩展到整个手机。

因此,Auto layout 在 iPhone X 可以有很好的继承。

使用 Safe Area

在 xib 里使用 Safe Area 很简单,打开开关就可以了。然后就可以约定控件与 Safe Area 的约束来完成适配。

而在代码里使用 Safe Area,可以使用 view 的 safeAreaLayoutGuide 属性。我找到的一段参考代码:

 

1

2

3

4

5

6

7

 

if #available(iOS 11, *) {

let guide = view.safeAreaLayoutGuide

NSLayoutConstraint.activate([

greenView.topAnchor.constraintEqualToSystemSpacingBelow(guide.topAnchor, multiplier: 1.0),

guide.bottomAnchor.constraintEqualToSystemSpacingBelow(greenView.bottomAnchor, multiplier: 1.0)

])

}

顶部设计误区

先讲讲最基本的原则:不要因为 iPhone X 的圆角、「刘海」、底部 Home Button 的影响,把控件挡住,影响用户使用。

如果你的应用使用 Auto Layout,在很大程度上适配起来是没有压力的。

有些朋友在发布会以后苦恼于 iPhone X 奇葩的双耳朵设计,联想到 X 使用了 OLED 屏幕(黑色像素不发光),想到了把应用顶部做平,置于耳朵之下的设计方案。也有开发者为此造了轮子。

然而,根据苹果的设计指南,这类设计是不被允许的。你的应用应该尽可能地充满整个屏幕,不能上下留边。

底部设计探讨

昨天我在朋友圈和微博发了这样的两幅图,并询问大家哪个好。

看了大家的反馈,两种喜欢的人数基本一样(只相差一票)。这是我在给一个 SheetView 做 iPhone X 时候遇到的疑问。带着疑问我把设计指南的视频又重新看了一遍。

先说结论,这里应该是第二种设计是被苹果鼓励的。下面从设计指南中找答案。

设计指南对底部适配有两种说法。一是不要将控件放置在易被误触的 Home 区域,二是鼓励大家把屏幕充满,包括底部。


这里的 SheetView 应该符合哪种情况呢?仔细听设计指南后发现,两种说法是在讨论不同情况时候出现的:一是讨论 button 和手势,二是讲到 TableView 时提到。而且,谈到第二种情况时,视频也指出应该把 TableView 和 CollectionView 这类控件充满屏幕。

我又担心这些还不够证明结论,我又再次看了一下系统层的 AlertSheet 是怎么实现的。答案更支撑了我的结论。

因而,iPhone X 的底部设计既需要考虑避免用户误触,也需要尽可能的把内容填充屏幕。个人结论:如果控件不具有内容属性,那不应该覆盖住 Home 区域

结论

以上是我适配 iPhone X 的一些总结。如有错误欢迎及时指出。

更多个人分享,可以瞧瞧我不怎么更新的技术博客:iOSHub。当然还有非技术的ChanTalk。

转载于:https://my.oschina.net/u/2345393/blog/1540261

适配 iPhone X 之异形屏相关推荐

  1. 【Android 屏幕适配】异形屏适配 ② ( 需要异形屏适配情况 | 需要异形屏适配的 Android 系统版本 | 刘海屏状态判定 | 异形屏适配调试 - 华为云调试 )

    文章目录 一.需要异形屏适配情况 1.需要异形屏适配的 Android 系统版本 8.0 2.正常有状态栏的界面竖屏不需要适配 3.正常有状态栏的界面横屏需要适配 4.刘海屏状态判定 二.异形屏适配调 ...

  2. Android异形屏适配(官方方案)

    一.前言 Android的异形屏,包括刘海屏,水滴屏.挖孔屏,起初是iOS设备上的杰作,有吐槽,也有赞美.刚出来不久,国内的各大厂商开始效仿,起初官方并没有API进行适配,一些厂商(例如小米.vivo ...

  3. uniapp小程序适配异形屏

    uniapp小程序适配异形屏 App.vue写入 底部适配横线 小程序自定义顶部适配 App.vue写入 globalData: { // 适配刘海屏test: false,statusBarHeig ...

  4. iOS APP适配iPhone X全屏

    要让APP在iPhone X上变成全面屏显示(占满整个屏幕),而不是上下有没用的黑条,其实很容易,只需要: 在LaunchImage 中添加一个和 iPhone X 相关的启动图片. 即一张尺寸:11 ...

  5. Unity3d中异形屏的适配

    Unity3d中异形屏的适配 参考博客:unity - 屏幕适配(异形屏) - 赵不灰 - 博客园

  6. 【Android 屏幕适配】异形屏适配 ① ( 异形屏类型:刘海屏、水滴屏、挖孔屏 | 沉浸式布局刘海屏适配 | 华为手机异形屏适配注意点 )

    文章目录 一.异形屏类型:刘海屏.水滴屏.挖孔屏 二.沉浸式布局刘海屏适配 三.华为手机异形屏适配注意点 屏幕适配参考文档 : 设备兼容性概览 屏幕兼容性概览 支持不同的像素密度 声明受限屏幕支持 异 ...

  7. iphone计算机适配,适配iPhone用户!戴尔将支持iPhone投屏电脑

    原标题:适配iPhone用户!戴尔将支持iPhone投屏电脑 一直以来,苹果的生态系统都非常的强大,但其封闭性一直是不少消费者的槽点.近日,著名的计算机制造商戴尔表示,将会在其系统预装的新版Mobil ...

  8. 【快应用】异形屏快应用如何全屏适配

     问题背景: 快应用页面中设置fullscreen属性为true全屏模式下,在一些异形屏上无法完全适配,状态栏会被黑边替代,无法真正全屏显示.这部分机型如何才能完全适配变成全屏呢? 相关代码: &qu ...

  9. “沉浸式”体验?异形屏适配?我把他们扒光了明明白白告诉你应该这样做

    看似复杂的沉浸式体验设计,其实也就是在处理以下两个 System UI与用户布局(setContentView)之间说不清理还乱的关系: StatusBar 系统状态栏 NavigationBar 系 ...

最新文章

  1. @PropertySource@ImportResource@Bean
  2. [hdu3549]Flow Problem(最大流模板题)
  3. silverlight5
  4. C++获取一段算法程序耗时方法
  5. P3992 [BJOI2017]开车
  6. TOA定位算法性能仿真
  7. VScode使用记录二:Windows 7下安装GCC、使用VSCode编译代码
  8. iOS中的UISearchBar
  9. docker镜像创建
  10. NeatUpload的安装使用 文件上传。可传大文件。
  11. 2020年浙江大学金融考研经验分享
  12. 油气井钻井风险预测与控制系统——需求分析
  13. JUL、JCL、Log4j、Slf4j各种日志框架的使用
  14. 零基础入门学习HTML(下)
  15. 微信分享次数统计、微信公众号分享关注统计
  16. 你的小米手机升级MIUI11后,电池掉电很快?那是这些设置没关掉吧
  17. python123查找指定字符输入m_Pyton学习—字符串
  18. 2.2 电阻的串联和并联
  19. tun驱动之tun_init
  20. Linux 使用 sed 整行(列)刪除

热门文章

  1. android系统怎么删,安卓手机怎么删除和清理系统垃圾
  2. fatal: remote error: The unauthenticated git protocol on port 9418 is no longer support问题解决
  3. 主机WiFi上网 虚拟机NAT方式上网
  4. 智能存包柜(物联网)让寄存随时随地
  5. Google的AI翻译正在接近人类的水平:
  6. 计算机网络论文英语翻译,COMPUTER NETWORK_计算机网络(英语论文翻译)
  7. 网页版支付宝沙箱开发支付成功同步回调session丢失问题与解决办法
  8. Unity 打包安卓APK到上架各大应用商店(超详细)
  9. 为电动助力转向系统EPS性能撑腰的这个“武器”,别低估了
  10. Axure对话框的设计