`

(转)[IOS]iPhone X适配参考

    博客分类:
  • IOS
阅读更多

转自:

https://www.jianshu.com/p/3a9ad4f0fa32?appinstall=0

 

随着iOS11和xcode9刚开始正式发布,小编也迫不及待的更新了xcode9,手机也顺利更新到iOS,也终于见到iPhone X 的真面不,看着齐刘海的样式,小编心里淡淡的忧伤,怎么适配,如何快速适配到项目中,成了一个蛋疼的问题

文章讲解点:

  • 1.首先看一下iPhone X的模拟器样式吧
  • 2.iPhone X的设计图
  • 3.启动页的适配
  • 4.刷新框架的适配iOS11
  • 5.纯代码的宽高比适配
  • 6.纯代码适配齐刘海
  • 7.纯代码适配iPhone X脚底
  • 8.xib和SB适配
  • 9,适配iOS 11 列表的册数删除
  • 10.tableView的头部试图和尾部试图
  • 11.UIBarButtonItem的适配
  • 12.无线真机测试
  • 13.真机地图适配

友情链接:

1.首先看一下iPhone X的模拟器样式吧

 
我是iPhone X

xcode 9 模拟器都带一个套套,像我这种强迫症看着淡淡的忧伤,没办法直接干掉算了
如果看着大小在电脑上面不合适,就把鼠标放到四个角的时候,可以随便拖大小的

更改模拟器外观样式.png

2.iPhone X的设计图

 

3.启动页的适配

iPhone X采用的和iPhone 6p一样的@3x的图,而不是传说中的@4x图,不然设计妹妹真的哭晕在厕所了,适配起来还是比较好弄的,但是iPhone X 的屏幕平尺变为1125 * 2436,如果你是用的是LaunchImage来管理启动页,那就可以找设计妹子给你弄一张图出来了(晚上一起吃饭不,那就看你本事了)。如果你使用的是LaunchScreen来适配的启动页,听我一句也去问问设计妹子吧,毕竟iPhone X的高宽比(iPhone X采用了iPhone 8的宽,却比iPhone 8p都要高)发生了变化,拉伸了设计妹子的图,会给你拼命的,
说的那么多废话,就一点是重要的iPhone X 的屏幕平尺变为1125 * 2436

4.刷新框架的适配iOS11

如果你使用了MJRefresh等刷新,并且你还隐藏了导航,那么你就会出现一下情况

造成这个原因就是:iOS 11上面废除了automaticallyAdjustsScrollViewInsets这个属性的使用,妹妹的搞什么,确实使用了UIScrollView's contentInsetAdjustmentBehavior来替代,详细介绍(本篇七秒只做开发中实际适配,不详细解答为何这样适配),如何适配?粘上下面代码即可

  if (@available(iOS 11.0, *)) {
    self.home_collectionView.contentInsetAdjustmentBehavior = UIApplicationBackgroundFetchIntervalNever;
} else {
    self.automaticallyAdjustsScrollViewInsets = false;
    // Fallback on earlier versions
}

但是看到每个地方倒要if else,确实不舒服,七秒斗胆写了一个宏,仅供参考

/// 第一个参数是当下的控制器适配iOS11 一下的,第二个参数表示scrollview或子类 
#define AdjustsScrollViewInsetNever(controller,view) if(@available(iOS 11.0, *)) {view.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;} else if([controller isKindOfClass:[UIViewController class]]) {controller.automaticallyAdjustsScrollViewInsets = false;}
 
适配后的界面,舒服多了
 

5.纯代码的宽高比适配

众所周知iPhone X的高宽比和以前的iPhone机型有所改变,那么我们纯代码适配,都是使用的系数进行适配,如:CGRectMake(20*kWJWidthCoefficient, 30*kWJHeightCoefficient, 100*kWJWidthCoefficient, 40*kWJHeightCoefficient)这样就可以适配使用的机型了,但是偏偏iPhone X上面宽度没有变,高度却增加不少,没办法只能在kWJHeightCoefficient系数来做文章吧,七秒没办法只能在写个宏了不然,我的一个个的写啊,累啊
说了那么多废话,其实就是iPhone X的高宽比和iPhone 8的一样就OK,但是iPhone X确实用的是@3x的图

/// 高度系数 812.0 是iPhoneX的高度尺寸,667.0表示是iPhone 8 的高度,如果你觉的它会变化,那我也很无奈 
#define kWJHeightCoefficient (kWJScreenHeight == 812.0 ? 667.0/667.0 : kWJScreenHeight/667.0)
 

6.纯代码适配齐刘海

众所周知,导航的高度为64,在哪个手机上面都是不变的,iPhone X没出来之前是对的,随便写64,iPhone X出来后,大家都傻眼了,导航栏高度变了有可能为88,傻眼了吧,如果你纯码写的都是64效果如下

//写死64效果
这就是自己写代码的不规范造成的,曾经有个程序员给说过:不要在代码里面看到重复多次的数字、字符串等的使用,如果重复多次就要抽取出来使用常量来表示,如果当时听他的话,能出现这个效果,吓的小遍立马改为(现在已经哭晕厕所)
重点 :别直接写64了,也别直接写88,写宏吧
重点:别直接写64了,也别直接写88,写宏吧
重点:别直接写64了,也别直接写88,写宏吧
#define SafeAreaTopHeight (kWJScreenHeight == 812.0 ? 88 : 64)

9,适配iOS 11 列表的册数删除

在iOS8之后,苹果官方增加了UITableVIew的右滑操作接口,即新增了一个代理方法(tableView: editActionsForRowAtIndexPath:)和一个类(UITableViewRowAction),代理方法返回的是一个数组,我们可以在这个代理方法中定义所需要的操作按钮(删除、置顶等),这些按钮的类就是UITableViewRowAction。这个类只能定义按钮的显示文字、背景色、和按钮事件。并且返回数组的第一个元素在UITableViewCell的最右侧显示,最后一个元素在最左侧显示。从iOS 11开始有了一些改变,首先是可以给这些按钮添加图片了,然后是如果实现了以下两个iOS 11新增的代理方法,将会取代(tableView: editActionsForRowAtIndexPath:)代理方法:
注意:看的有的文章如果在iOS11上面调用老的删除,会崩溃,小编测试没有遇到,还是请大家趁早替换适配吧

- (nullable UISwipeActionsConfiguration *)tableView:(UITableView *)tableView leadingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration?
  
9.1,右滑和左滑调用
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? { let action = UIContextualAction(style: .destructive, title: "Delete") { (action, view, handler) in handler(true) } let configuration = UISwipeActionsConfiguration(actions: [action]) return configuration } func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? { let action = UIContextualAction(style: .normal, title: "Mark") { (action, view, handler) in handler(true) } action.backgroundColor = UIColor.init(red: 254/255.0, green: 175/255.0, blue: 254/255.0, alpha: 1); let configuration = UISwipeActionsConfiguration(actions: [action]) return configuration }

 

10.tableView的头部试图和尾部试图

在iOS11里面有时候在tableView的头部和尾部留白,因为苹果给滚动试图加进去了self-sizeing,开始计算逐步计算contentSize,默认如果不去实现viewForHeaderInSection就不会调用heightForHeaderInSection,尾部试图一样。

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { } func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return 0.001 }
 
如果你不想实现viewForHeaderInSection也不想留白,那么只需要你把self-sizeing自动估高关闭即可
/// 自动关闭估算高度,不想估算那个,就设置那个即可 
self.tableView.estimatedRowHeight = 0; 
self.tableView.estimatedSectionHeaderHeight = 0; 
self.tableView.estimatedSectionFooterHeight = 0;
 

11.UIBarButtonItem的适配

UIBarButtonItem错位效果:

 在iOS 11 里面使用 CustomView创建的item造成frame错乱以及设置边距item.width = -20等失效问题,归根结底是因为苹果更改了iOS11上面uinavigationBar的结构

iOS 11以前的navigationBar:

添加的right和left直接添加到navigationBar上面,并且使用的是frame布局的

iOS 11 navigationBar结构图:

有图我们可以看到, 添加的right和leftUIBarButtonItem并不是直接添加到nagitionBar上面。而是在外面嵌套了一个uibuttonBarStackView,而StackView并不是使用的frame,而是用的约束来布局,所以必须得用 AutoLayout 了!
 /// 适配iOS11 UIBarButtonItem 添加自定义布局 
if (@available(iOS 9.0,*)) { 
/// 强迫症的朋友这里也是可以写成11.0 
[backbtn.widthAnchor constraintEqualToConstant:size.width].active = true; 
[backbtn.heightAnchor constraintEqualToConstant:size.height].active = true; }
 iOS11里面正确效果:

12.无线真机测试

这应该也是xcode 9的一个亮点吧,但是速度真的不是很干恭维的。注意手机和电脑必须在同一个局域网内
首先使用手机连接xcode之后,打开window->Devices and Simulator->勾选Show as run destination和Connect via network,这样就可以无线测试了,以后妈妈再也不用担心忘记带线了

13.iOS11 真机地图

在iOS11地图适配,在iOS11中,如果使用到地图,我们就需要在info,里面添加NSLocationAlwaysAndWhenInUseUsageDescriptionNSLocationWhenInUseUsageDescription才可以在ios11里面正常调出地图
分享到:
评论

相关推荐

    iOS11及iPhoneX适配最新最全指南.pdf

    适配iOS11和iPhoneX是移动应用开发者在2017年及之后面临的重要任务。随着苹果公司推出的新一代iPhoneX手机和iOS 11操作系统,开发者必须应对新的屏幕尺寸、用户界面元素和API的变更。 ### iPhoneX的适配要点 1. **...

    iOS 自动布局及适配iPhone6

    iOS自动布局及适配iPhone6的知识点涵盖了iOS应用开发中界面布局与适配的关键技术,主要包括自动布局(Auto Layout)的使用、屏幕分辨率和像素的处理,以及使用Size Classes来适配不同尺寸的屏幕。 1. 自动布局...

    iOS11及iPhoneX适配-探索方案.pdf

    掌握苹果最新适配,一篇就够了!通过真实上线的App细致讲述iOS11及iPhone X适配所需要做的全部工作,包括顶部statusBar、刘海、scrollview下沉及底部tabBar等适配注意事项。

    iOS 适配iPhone X的方法

    iOS 适配iPhone X的方法 iOS 适配iPhone X的方法主要是为了解决iPhone X独特的刘海屏幕设计带来的适配问题。iOS 11之后,系统深化了“安全区域”概念,安全区域就是从屏幕上切除最大的矩形之外的区域。为了适配...

    iPhoneX适配以及 iPhoneX 中MJRefreh 适配

    本话题主要关注的是如何在iPhone X及其后续型号(iPhone XS, XS Max, XR, 11系列, 12系列, 13系列等)上进行适配,特别是针对屏幕顶部的“刘海”区域,以及在这些设备上使用 MJRefresh 框架时的注意事项。...

    ios-超强自定义tabBar (修复iPhone X 适配问题).zip

    ⊙ 修复iPhone X 适配问题 ⊙ 性能优化 ⊙ 支持自定义tabBar动画 ⊙ 支持自定义tabBar样式 ⊙ 支持自定义badgeValue动画 ⊙ 支持自定义badgeValue样式 ⊙ 完美支持横竖屏 ⊙ 支持CocoaPods 更多说明请移步...

    详解iOS11、iPhone X、Xcode9 适配指南

    本篇文章主要探讨了iOS11、iPhone X以及Xcode9的适配问题,帮助开发者解决在升级过程中遇到的各种挑战。 首先,我们来看升级到iOS11后可能遇到的适配问题。在iOS11中,`UIViewController`的`...

    iPhone X 设计适配指南 & iOS 11 新特性 - 知乎专栏

    iOS开发人员在适配iPhone X时,需要考虑的设计和编码规范较为复杂。设计方面,适配的重点在于屏幕尺寸、分辨率和特定的UI元素。iPhone X屏幕尺寸为5.8英寸,分辨率达到1125px×2436px(竖屏模式下),提供了375pt宽...

    iPhoneX安全区域(Safe Area)底部小黑条在微信小程序和H5的屏幕适配

    最近写小程序时,遇到了 iPhoneX 底部小黑线与内容重叠的问题,实际上是iPhoneX安全区域的适配问题,了解清楚这个问题花了挺多时间的,也实操出了结果,忍不住来总结总结。 前言 在苹果 iPhoneX 、iPhone XR等设备上...

    iPhone X 美团适配记录

    标题中提到的“iPhone X 美团适配记录”涉及到了iPhone X这款手机在美团iOS应用程序中的适配过程。适配是一个专业术语,通常指软件或者网页在不同的设备上能够正常显示和使用,不会因为设备的尺寸、分辨率、操作系统...

    swift-iOS分屏控制器完美适配iPhoneX系列

    在Swift开发中,为了实现iOS应用的优秀用户体验,适配各种设备特性是非常关键的,特别是随着iPhone X系列的推出,其独特的刘海屏设计带来了新的挑战。"swift-iOS分屏控制器完美适配iPhoneX系列"这个项目正是针对这一...

    iOS11&iPhoneX适配&Xcode9打包注意事项

    iOS11&iPhoneX适配是最新的iOS系统和iPhoneX设备的适配问题,涉及到UITableView、UIScrollView、网页加载、iPhoneX屏幕适配、Xcode9打包等多个方面。 首先,在UITableView适配中,需要注意iOS11的变化。在iOS11中,...

    iphone和ipad适配

    在iOS开发领域,"iPhone和iPad适配"是一个至关重要的主题,因为它涉及到应用程序在不同设备上的兼容性和用户体验。为了确保应用能在iPhone和iPad上顺畅运行并提供一致的体验,开发者需要考虑多方面的因素,包括屏幕...

    iPhoneX适配手QH5页面通用解决方案.docx

    《iPhoneX适配手QH5页面通用解决方案》 随着iPhone X的发布,其独特的设计特点,如顶部的状态栏和底部的Home Indicator,为H5页面的适配提出了新的挑战。针对这一问题,本文主要探讨如何针对iPhone X进行手Q H5页面...

    小程序以及H5页面上IphoneX底部安全区域小黑条适配问题

    公司项目开发中,发现iPhoneX上吸底元素存在被小黑条遮挡的问题 原因 在苹果 iPhoneX 、iPhone XR等机型上,物理Home键被取消,改为底部小黑条替代home键功能,从而导致吸底元素会被小黑条遮挡覆盖的问题 解决方案 ...

    IOS屏幕适配

    此外,还可以使用详细的适配方法,对于 iPhone6 Plus,需要另外提供一套@3x 的图片。并且,需要手动开启高分辨率模式,可以使用添加大屏的 LaunchImage 或添加 Launch Screen File。 在屏幕适配时,还需要考虑到横...

    iPhoneX适配

    在iOS开发中,适配iPhone X是至关重要的一步,因为iPhone X引入了许多新的设计元素,如无边框屏幕、刘海屏(Notch)以及安全区域(Safe Area)。本篇文章将详细探讨如何进行iPhone X以及类似机型的适配,主要包括...

    IOS几种方式的适配

    在iOS开发中,适配是确保应用程序在不同设备和屏幕尺寸上正常运行的关键步骤。本文将深入探讨三种主要的适配方法:XIB( Interface Builder 文件)、代码编程以及Storyboard。 ### XIB适配 XIB(XML Interface ...

    ios image 3x图 一键生成 生成 1x 2x 图脚本

    在iOS开发中,为了适配不同分辨率的设备,如iPhone 3GS至iPhone 12 Pro Max等,开发者需要提供不同尺寸的图片资源。这些图片通常以1x、2x和3x的比例来表示,分别对应低分辨率、Retina显示和更高分辨率的设备。1x图像...

Global site tag (gtag.js) - Google Analytics