iOS11.0以后无法调整UINavigationBarItem

  • 在iOS11中, 发现以前修改barButton位置的方法不再奏效了, 通过查看UI层级结构发现, 从iOS11开始, barButton不再是直接加到navigationBar上面, 而是加在一层_UIButtonBarStackView
WX20171228-191415@2x.png
  • _UIButtonBarStackView是新添加上去的一个容器view, 我们可以通过遍历子控件的方式遍历出来这个控件, 但是无法直接获取, 因此不建议直接操作这个没有暴露出来的控件.

    WX20171228-191538@2x.png

  • 从图片UI层级结构上可以看出来, stackView的默认x值是16, 而我们将自定义的UIButton直接添加上去, 无法满足我们的button靠近屏幕边缘的要求.

  • 如果使用iOS11之前的方法, 使用一个系统的barButton来作为占位视图的话, 就会出现如下的效果.

    UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
    self.navigationItem.leftBarButtonItems = @[spacer, leftItem];
    
WX20171228-191947@2x.png
  • 从上图中可以发现, 当我们添加一个系统的barButton时, stackView的x向左侧移动了8pt, 因此我们可以利用这个特点, 将customButton向左侧移动, 从而达到修改navigationBarButton位置的需求

    button.contentEdgeInsets = UIEdgeInsetsMake(0, -8, 0, 8);
    
WX20171228-192326@2x.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容