iOS11.0以后无法调整UINavigationBarItem

  • 在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);
    

你可能感兴趣的:(iOS11.0以后无法调整UINavigationBarItem)