在iOS的导航栏上,默认设置的leftBarButtonItemrightBarButtonItem的边距都是16

self.navigationItem.leftBarButtonItem = [self barButtonItem:@"left1"];
self.navigationItem.rightBarButtonItem = [self barButtonItem:@"rightItem1"];

- (UIBarButtonItem *)barButtonItem:(NSString *)title {
    UIButton *btn = [UIButton buttonWithType:0];
    [btn setTitle:title forState:UIControlStateNormal];
    [btn sizeToFit];
    btn.backgroundColor = LGColorOfRamdom;
    return [[UIBarButtonItem alloc] initWithCustomView:btn];
}

如果需要修改间距,我们会这样做:

self.navigationItem.leftBarButtonItems = @[[self fixedSpaceItem:-8], [self barButtonItem:@"left1"]];
self.navigationItem.rightBarButtonItems = @[[self fixedSpaceItem:-8], [self barButtonItem:@"rightItem1"]];

- (UIBarButtonItem *)fixedSpaceItem:(CGFloat)space {
    UIBarButtonItem *fixedItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
    fixedItem.width = space;
    return fixedItem;
}

iOS 11: 虽然设置了间距,但是只是对内部的视图的大小做了处理,left1按钮位置并没有改变

iOS 11以前: iOS 11以前能够达到我们想要的目的

对比两者的视图结构

iOS 11中,left1先由UITAmicadaptorView包裹,再包裹一层UIButtonBarStackView,最后添加在UINavigationBarContentView上;而iOS 11 以前,是直接添加在UINavigationBar上的

results matching ""

    No results matching ""