更改UINavigationBar的前导和尾随边距

时间:2018-05-04 20:58:38

标签: ios uinavigationcontroller uinavigationbar

有没有办法更改由UINavigationController控制的UINavigationBar的前导和尾随边距?我使用自定义界面,这将有助于在后面和完成按钮的左侧和右侧留出更多空间。

2 个答案:

答案 0 :(得分:0)

您可以更改导航控制器上的导航框架

class NavigationController: UINavigationController {

    override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    let space = 30
    self.navigationBar.frame = CGRect(x: CGFloat(space), y: 0, width: self.navigationBar.frame.size.width-CGFloat(space*2), height: self.navigationBar.frame.size.height)
    }
}

答案 1 :(得分:0)

在stackoverflow上有关于此问题的无数问题。在iOS< 11上,添加负间隔按钮可以正常工作。

在iOS 11上,调整[_UINavigationBarContentView directionalLayoutMargins]以返回零值会删除左/右项周围的任何尾随填充:

NSDirectionalEdgeInsets zeroMargins(id self, SEL _cmd) {
  return NSDirectionalEdgeInsetsMake(0, 0, 0, 0);
}

- (void) doIt {
    Class cl = objc_getClass("_UINavigationBarContentView");
    if (cl != nil) {
        method_setImplementation(class_getInstanceMethod(cl, @selector(directionalLayoutMargins)), (IMP)zeroMargins);
    }
}