升级到Xcode9之后项目导航栏的按钮出现了错乱。
如图leftBarButtonItem出现了明显的错乱,而且rightBarButtonItem点击也没有了反应。因为iOS11出来也比较久了,直接在网上查阅了一波资料,解决的方案也比较多。其核心思路都是强行给他们重新布局或者移位。
例如 iOS11 导航栏按钮位置问题的解决——新
UIBarButtonItem *fixedSpace = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
target:nil
action:nil];
fixedSpace.width = width;
也有心狠直接重写drawrect的iOS11 正确控制导航leftBarButtonItems的姿势
虽然这些方法,也能解决部分问题。但是感觉还是没有解决根本问题。于是结合iOS11前后的的navigationBar的视图结构研究发一番,很轻易就能发现发生的一些变化。其中最关键的就是点就是UIButtonBarStackview.看他的名字应该是就是UIStackView无疑。对UIStackView不熟悉,没关系,UIStackView是iOS9推出来帮助开发者进行线性的布局页面,这组控件可以垂直显示,也可以水平显示。UIStackView教程
所以简单来说要解决这个问题很简单。翻一下UIStackView的文档,会发现真的是一大篇。其中有句话很关键。The stack view uses Auto Layout to position and size its arranged views.
之前的代码都是用的frame去初始化navigationItem。然后我尝试用了下用masony去对navigationItem.customView做了下约束。发现问题一下就解决了。。
试了半天也没找到怎么让图片并排的方法。。。。。很难受