美文网首页
iOS11 自定义的导航条上移问题

iOS11 自定义的导航条上移问题

作者: ibiaoma | 来源:发表于2017-12-22 14:42 被阅读670次
    image.png

    在自定义导航条时,通常会继承系统的UINavigationBar,但如上图,在iOS11上,导航条改动了。
    自定义导航条代码

        -(MBNavigationBar *)myNavBar{
            if (!_myNavBar) {
                _myNavBar = [[MBNavigationBar alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 64)];
                _myNavBar.barTintColor = [UIColor colorWithRed:245/255.0 green:245/255.0 blue:245/255.0 alpha:1.0];
                _myNavBar.translucent = NO;
            }
            return _myNavBar;
        }
    

    高度设置为64,但看着高度只有44,而且上移到状态栏位置
    不过仔细看层级结构对照可以发现,导航栏的高度还是64,内部的子视图向上移动了导航栏高度的距离。


    image.png

    在自定义的UINavigationBar中,遍历找到需要的控件,对size.height和origin.y和相应调整,
    版本适配:iOS10之前使用的是_UINavigationBarBackground,iOS10之后改为_UIBarBackground

        #define IS_IPHONE_X ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO)
        - (void)layoutSubviews
                {
                    [super layoutSubviews];
                    
                    CGFloat systemVersion = [UIDevice currentDevice].systemVersion.floatValue;
                    for (UIView *view in self.subviews) {
                        if (systemVersion >= 11.0) {
                            if ([view isKindOfClass:NSClassFromString(@"_UIBarBackground")]) {
                                CGRect frame = view.frame;
                                frame.size.height = 64;
                                if (IS_IPHONE_X) {
                                    frame.size.height = 88;
                                }
                                view.frame = frame;
                            }
                            if ([view isKindOfClass:NSClassFromString(@"_UINavigationBarContentView")]) {
                                CGRect frame = view.frame;
                                frame.origin.y = 20;
                                if (IS_IPHONE_X) {
                                    frame.origin.y = 44;
                                }
                                view.frame = frame;
                            }
                        }
                    }
                }
    

    之后便正常了


    image.png

    有时设置BackgroundImage也可以

        [_myNavBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];

    相关文章

      网友评论

          本文标题:iOS11 自定义的导航条上移问题

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