iOS navigation设置问题二:Right/Left C

2018-04-20  本文已影响19人  圆脸黑猫警长
问题:ios11 以后Right/Left CustomView和屏幕边缘的间距进行了调整,11上为16point,10为8point。导致在两种版本上的边距显示不正确。
原因:Right/Left CustomView 的layoutMargins系统进行了设置。

(lldb) po self.navigationController?.navigationBar.subviews[2].layoutMargins
▿ Optional<UIEdgeInsets>
▿ some : UIEdgeInsets
- top : 0.0
- left : 16.0
- bottom : 0.0

处理方案:

自定义navgationbar,重新设置layoutMargins。

在自定义的navigationBar中加入如下代码:

-(void)layoutSubviews
{
    [super layoutSubviews];
    
    for (UIView *view in self.subviews)
    {
        view.layoutMargins = UIEdgeInsetsZero;
    }
}
如何改为自定义的navBar?

方案一:在storyboard中选中navbar设置其class为自定义的即可,用处理方案中的代码即可。
方案二:代码设置需要首先自定义navigationController,重写其- (void)viewDidAppear:(BOOL)animated

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    // 添加修正方法
    for (UIView *view in self.navigationBar.subviews)
    {
        view.layoutMargins = UIEdgeInsetsZero;
    }
}

注意:
navigationBar属性是只读的,而且在sb中加载完后就已经完成了全部的customView,所以在代码中设置自定义navBar则不能正确加载sb中的customView,除非代码去重新设置customView。

参考:
https://forums.developer.apple.com/thread/80075#280515
http://www.matrixprojects.net/p/uibarbuttonitem-ios11/

上一篇下一篇

猜你喜欢

热点阅读