适配ios11与iphone x实践_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > 适配ios11与iphone x实践

适配ios11与iphone x实践

 2017/10/12 13:25:46  布尔-  程序员俱乐部  我要评论(0)
  • 摘要:一、适配iOS11问题1:项目中有原生与H5的交互,运行在iOS11时,直接漰溃在框架WebViewJavascriptBridge内部。报错信息:Completionhandlerpassedto-[WKWebViewJavascriptBridgewebView:decidePolicyForNavigationAction:decisionHandler:]wascalledmorethanonce解决:当时第一时间肯定是立即看github上该框架的issue,果然找到了解决方案
  • 标签:iphone iOS

一、适配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

  ps: 最近做路径规划,在集成高德地图时拖入第三方代码时也是因为这个原因报错。使用同样的方式都可以解决。亲测。

 

 

二、适配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)

 

上一篇: 初用MssqlOnLinux 下一篇: 没有下一篇了!
发表评论
用户名: 匿名