美文网首页
iOS navigation设置问题二:Right/Left C

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

作者: 圆脸黑猫警长 | 来源:发表于2018-04-20 11:58 被阅读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/

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/wokakftx.html