一、适配iOS11

问题1:项目中有原生与H5的交互,运行在iOS11时,直接漰溃在框架WebViewJavascriptBridge内部。

报错信息:Completion handler passed to -[WKWebViewJavascriptBridge webView:decidePolicyForNavigationAction:decisionHandler:] was called more than once

解决:当时第一时间肯定是立即看github上该框架的issue,果然找到了解决方案。该issue链接:https://github.com/marcuswestin/WebViewJavascriptBridge/issues/302,详情如下图

按照上述提供的解决方案修改就好了,下图是修改前与修改后对比 ( 左图修改前,右图修改后 )

      

问题2:用户首次安装时, 定位权限框不弹出?

解决:原来在ios 11内权限的请求被降级了,因为之前工程内首次请求定位权限使用的方法为requestAlwaysAuthorization,但在ios11内要使用requestWhenInUseAuthorizationf

问题3:ios11中tableView分组间距变大。

解决:原来组尾间距之前实现了heightForFooterInSection,而没有实现viewForFooterInSection方法,在ios11之前是没问题,但现在就都要实现,如果不需要他们之前有间距需要这样设置

问题4:关于tableView或scrollView的在ios11中新增加的contentInsetAdjustmentBehavior属性问题

解决:看我上一篇博客 http://www.cnblogs.com/buerjj/p/7655090.html

问题5:将第三方框架代码拖入Xcode 9工程中,使用时报错。例如:gitHub下载最新的masonry源码,将masonry文件拖入工程中,勾上copy items if needed,选择create groups,勾上Add to targets。使用masonry代码如下

[self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {

make.edges.mas_equalTo(self.view);

}];

然后发现的masonry报错如下:[UITableView mas_makeConstraints:]: unrecognized selector sent to instance 0x7f9c6f0b7200。

原因:Xcode 9插入第三方代码不会将代码放入工程编译,拖入masonry文件夹后,点工程 - build phases - compile sources ,会发现这里没有masonry相关文件。

解决1:点工程 - build phases - compile sources 点 + 号,将masonry加入编译。

解决2:不要使用拖入,应点击工程,右键Add Files To

备注:这应该是Xcode 9.0 bug,据说9.1beta版已经修复。看此链接:http://blog.csdn.net/thoris/article/details/78139274?locationNum=7&fps=1

二、适配iPhone x

问题1:在iPhone x模拟器上有tabBar时,push页面底部的tabBar会向上跳动一下,然后返回回来后又是tabBar又正常,再push又会跳动。

解决:在拦截所有控制器push的地方加上如下代码

问题2:导航栏高度问题;因为工程中没有使用系统的导航栏,全是自定义的view,所以在iphone x上,导航栏高度还是64显然是不对的。

解决:所以加入导航栏的宏定义,利用[UIApplication sharedApplication].statusBarFrame.size.height + 44就可以动态得到导航栏高度。其他就不用修改了,只需要调整一下高度。还好之前导航栏自定义时内部的布局封装得比较好。

问题3:底部tabBar变高。

解决:因为使用的是系统tabBar,高度会自动适配,但view中有些布局如果相对于原来tabBar写死了49的高度的话,那就不行了,所以根据屏幕高度判断是否为iPhone X,用宏定义写tabBar的高度。这部分宏定义如下所示:

// 是否是iphoneX

#define     kIsIphoneX      ([UIScreen mainScreen].bounds.size.height == 812 ? YES : NO)

// tabbar高度

#define     kTabBarH        (kIsIphoneX ? 83 : 49)

适配ios11与iphone x实践的更多相关文章

  1. 适配 iOS 11 & iPhone X 大全

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

  2. ios 适配iOS11&iPhoneX的一些坑

    前阵子项目开发忙成狗,就一直没做iOS11的适配,直到XcodeGM版发布后,我胸有成竹的在iPhoneX上跑起项目,整个人都凉透了...下面总结一下我遇到的坑,不是很全面,日后补充. 导航栏 导航栏 ...

  3. 适配iOS11和iPhoneX

    详细见参考链接吧, 其他不多说了. 适配iOS11&iPhoneX的一些坑 http://www.cocoachina.com/ios/20170921/20623.html http://w ...

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

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

  5. iOS11、iPhone X、Xcode9 适配

    更新iOS11后,发现有些地方需要做适配,整理后按照优先级分为以下三类: 1.单纯升级iOS11后造成的变化: 2.Xcode9 打包后造成的变化: 3.iPhoneX的适配 一.单纯升级iOS11后 ...

  6. iOS之iOS11、iPhone X、Xcode9 适配指南

    更新iOS11后,发现有些地方需要做适配,整理后按照优先级分为以下三类: 1.单纯升级iOS11后造成的变化: 2.Xcode9 打包后造成的变化: 3.iPhoneX的适配 一.单纯升级iOS11后 ...

  7. iOS11、iPhone X、Xcode9 适配指南

    更新iOS11后,发现有些地方需要做适配,整理后按照优先级分为以下三类: 1.单纯升级iOS11后造成的变化: 2.Xcode9 打包后造成的变化: 3.iPhoneX的适配 一.单纯升级iOS11后 ...

  8. iOS11 与 iPhone X适配的那些坑(持更中...)

    目录 问题列表 1.适配iPhoneX 屏幕原则 2.适配过程一些常量的设置 3..iPhone X 上运行有黑色区域问题 4.iOS11导航栏适配 5.出现UIScrollview 漂移问题(基本都 ...

  9. 你可能需要为你的APP适配iOS11

    WeTest 导读  iOS 11 为整个生态系统的 UI 元素带来了一种更加大胆.动态的新风格. 本文介绍了iOS11在UI方面做了哪些更新,有些更新可以为用户提供更加完美的体验,但也有的可能会给目 ...

随机推荐

  1. EL表达式的js函数传参问题

    <!Doctype html> <html> <head> <title>js的传参问题</title> <script type=& ...

  2. 【全面总结】js获取元素位置大小

    [js获取元素位置+元素大小]全面总结 目录 1.关于offset offsetParent(只读) offsetTop(只读) offsetLeft(只读) offsetHeight(只读) off ...

  3. 用GDI+画验证码

    1.新建一个窗体应用程序,在上面拖一个pictureBox对象,为其添加单击事件 2.创建GDI对象.产生随机数画入图片中.画线条.最后将图片到pictureBox中,代码如下: private vo ...

  4. 【2017集美大学1412软工实践_助教博客】团队作业6——展示博客(Alpha版本)

    题目 团队作业6: http://www.cnblogs.com/happyzm/p/6791211.html 团队成绩 团队成员简介 项目地址 项目目标,包括典型用户.功能描述.预期用户数量 如何满 ...

  5. 201521123107 《Java程序设计》第7周学习总结

    第7周作业-集合 1.本周学习总结 2.书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 源代码如下: public boolean contains( ...

  6. 结对作业(1)----基于GUI的四则运算

    小伙伴:201421123031 余洋 201421123044  潘志坚  题目要求: 我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序.进一步,本次要求把这个程序做成GUI(可以是W ...

  7. 201521123069 《Java程序设计》 第11周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 1.线程间的互斥访问(线程竞争):一些同时运行的线程需要访问共享数据,互斥访问是保证共享资源完整性的手段.实现方式 ...

  8. 201521123044 《Java程序设计》第13周学习总结

    1. 本章学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 1.网络基础 1.1 比较ping www.baidu.com与ping cec.jmu.ed ...

  9. Java: server/client 心跳机制实现 示例

    心跳机制 心跳机制是定时发送一个自定义的结构体(心跳包),让对方知道自己还活着,以确保连接的有效性的机制. 大部分CS的应用需要心跳机制.心跳机制一般在Server和Client都要实现,两者实现原理 ...

  10. 将缓冲区的数字字符串转化成BCD码数据_INT PubNumericToBCDStr(_UCHR *pcNStr, _INT iNLen, _UCHR *pcBCDStr)

    INT PubNumericToBCDStr(_CHR *pcNStr, _INT iNLen, _CHR *pcBCDStr) { _UCHR *pN = pcNStr; _UCHR *pB = p ...