- 在iOS11中, 发现以前修改
barButton
位置的方法不再奏效了, 通过查看UI层级结构发现, 从iOS11开始,barButton
不再是直接加到navigationBar
上面, 而是加在一层_UIButtonBarStackView
上
-
_UIButtonBarStackView
是新添加上去的一个容器view, 我们可以通过遍历子控件的方式遍历出来这个控件, 但是无法直接获取, 因此不建议直接操作这个没有暴露出来的控件.
从图片UI层级结构上可以看出来,
stackView
的默认x值是16, 而我们将自定义的UIButton
直接添加上去, 无法满足我们的button
靠近屏幕边缘的要求.-
如果使用iOS11之前的方法, 使用一个系统的
barButton
来作为占位视图的话, 就会出现如下的效果.UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; self.navigationItem.leftBarButtonItems = @[spacer, leftItem];
-
从上图中可以发现, 当我们添加一个系统的barButton时,
stackView
的x向左侧移动了8pt, 因此我们可以利用这个特点, 将customButton
向左侧移动, 从而达到修改navigationBarButton
位置的需求button.contentEdgeInsets = UIEdgeInsetsMake(0, -8, 0, 8);