开始适配iOS 11,UITableView 和导航上icon显示问题

iOS 11 发布以来,因为一直在忙其他的事情(总之是跟代码无关的事情)这周终于空闲下来研究一下。

发现问题一

打开之前的一个项目,首页就发现一个问题,导航条隐藏整个页面上只有一个UITableView,然后出线了下面的一幕:


31512986907_.pic.jpg

页面并没有直接顶到顶端,而是空出了状态栏的空白。因为界面使用的是 storyboard 查了官方文档和各种资料发现可能是iOS11弃用了 automaticallyAdjustsScrollViewInsets 属性,取而代之的是 UIScrollView 新增了 contentInsetAdjustmentBehavior 属性,这一切的罪魁祸首都是新引入的 safeArea 。

然后就是想办法解决问题

首先想到的是在 storyboard 上把顶部的约束由 0 设置为 -20,过程中发现 ViewConroller 的 Top Layout Guide 的 Y 变为 20 了,由于粗心之前一直没有注意过 iOS 11 xcode 9 之前是多少。再把约束设置为 -20 之后页面显示没问题,但是在下拉刷新的时候发现一个小问题,就是下拉箭头显示在了页面上,并没有像之前一样显示在屏幕之外。到这时并没有继续去修改下拉控件,而是感觉这种解决方法并不是最合理的。

于是继续填坑。。。感觉还应该是 contentInset 上面的问题,然后查资料发现可以这样设置

  if #available(iOS 11.0, *) {
      UIScrollView.appearance().contentInsetAdjustmentBehavior = .never
  }

写在 AppDelegate.swift 里面,运行模拟器,的确是解决了问题。但是运行期间有一次发现在没有隐藏导航条并且界面是 UIScrollView 或者 UITableView 的页面进入 3、4 级页面回退的时候当前页面会有一个向上的回弹动画,但是再次运行的时候发现有没有了这样的问题。所以建议可以把上面的代码放到隐藏导航条的页面上,把 UIScrollView.appearance() 设置为页面的 UIScrollView 或者其子类即可。

发现问题二
image.png
21512986888_.pic.jpg

导航上的图片显示过大了。问题的原因大致是只要NavigationBar 使用了
initWithCustomView 这个方法,而 CustomView 的控件尺寸小于图像实际尺寸的话, iOS 11 系统会自动将该控件设置为图像的实际尺寸,所以 NavigationBar 上面的图像就会变形。找到原因就好处理了。

解决方法

第一种解决方法就是重新切图,将图片按照标准重新切图,但是对于有的程序员不会的话这个方法就比较坑了,还得找 UI 设计的同事重新切图。所以还是自己动手比较好。
所以第二种方法就是在原来的控件上添加一个父 View ,然后把 view 的背景设置为透明即可。具体原理暂时还不知道。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 15,628评论 4 61
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 179,319评论 25 708
  • 腹有诗书气自华 枕上诗书闲好处
    关雎长乐阅读 1,084评论 0 7
  • 这一周过去了,在圣诞的钟声,我们已经结束了2016年的倒数第二个星期,下一周,即将迎来2017年的曙光。这个周过的...
    小小山药阅读 159评论 0 0

友情链接更多精彩内容