美文网首页
解决状态栏和导航不一致的问题

解决状态栏和导航不一致的问题

作者: DDY | 来源:发表于2018-08-23 13:54 被阅读241次

iOS 11 + 可能有时候会碰到状态栏和导航颜色不一致,导航是设置的颜色或者背景不能扩展到状态栏层级下。

DDYNavigationBar.jpg

沉浸式消失了

  • 如果是scrollView自动调整引起的那么
if (@available(iOS 11.0, *)) {
  self.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
 } else {
  self.automaticallyAdjustsScrollViewInsets = NO;
}
  • 如果上面不能解决,可能是因为导航在iOS 11+始终44高度造成的 ,那么

写一个分类

+ (void)load {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        [self changeOrignalSEL:@selector(sizeThatFits:) swizzleSEL:@selector(ddy_SizeThatFits:)];
        [self changeOrignalSEL:@selector(layoutSubviews) swizzleSEL:@selector(ddy_LayoutSubviews)];
    });
}

+ (void)changeOrignalSEL:(SEL)orignalSEL swizzleSEL:(SEL)swizzleSEL {
    Method originalMethod = class_getInstanceMethod([self class], orignalSEL);
    Method swizzleMethod = class_getInstanceMethod([self class], swizzleSEL);
    if (class_addMethod([self class], orignalSEL, method_getImplementation(swizzleMethod), method_getTypeEncoding(swizzleMethod))) {
        class_replaceMethod([self class], swizzleSEL, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod));
    } else {
        method_exchangeImplementations(originalMethod, swizzleMethod);
    }
}

- (CGSize)ddy_SizeThatFits:(CGSize)size {
    CGSize navigationBarSize = [self ddy_SizeThatFits:size];
    if (@available(iOS 11, *)) {
        navigationBarSize.height = navigationBarSize.height + [[UIApplication sharedApplication] statusBarFrame].size.height;
    }
    return navigationBarSize;
}

- (void)ddy_LayoutSubviews {
    
    [self ddy_LayoutSubviews];
    if (@available(iOS 11, *)) {
        for (UIView *aView in self.subviews) {
            if ([@[@"_UINavigationBarBackground", @"_UIBarBackground"] containsObject:NSStringFromClass([aView class])]) {
                aView.frame = CGRectMake(0, -CGRectGetMinY(self.frame), CGRectGetWidth(self.frame), CGRectGetHeight(self.frame)+CGRectGetMinY(self.frame));
            }
        }
    }
}

相关文章

  • 2018-04-09

    原文:IOS状态栏和导航栏的控制问题 IOS的项目多数会遇到控制状态栏和导航栏的问题,比如隐藏状态栏、控制状态栏的...

  • 解决状态栏和导航不一致的问题

    iOS 11 + 可能有时候会碰到状态栏和导航颜色不一致,导航是设置的颜色或者背景不能扩展到状态栏层级下。 沉浸式...

  • 导航栏和状态栏

    IOS状态栏和导航栏的控制问题

  • iOS 状态栏和导航栏的控制

    iOS的项目多数会遇到控制状态栏和导航栏的问题,比如隐藏状态栏、控制状态栏的文字颜色等,导航栏也有同样需求。 自从...

  • IOS状态栏和导航栏的控制问题

    IOS的项目多数会遇到控制状态栏和导航栏的问题,比如隐藏状态栏、控制状态栏的文字颜色等,导航栏也有同样需求。本文总...

  • 使用系统navigationBar

    解决办法 状态栏是透明的 导航条是半透明的 如果隐藏导航条而状态栏还在 是由于系统问题造成的 在ios11之前需要...

  • iOS 获取状态栏、导航栏、tabBar高度

    状态栏、导航栏 和 tabbar 高度(pt) iPhone型号 状态栏 状态栏 导航栏 导航栏 tabBa...

  • IOS状态栏和导航栏的控制问题

    注:转自这里IOS的项目多数会遇到控制状态栏和导航栏的问题,比如隐藏状态栏、控制状态栏的文字颜色等,导航栏也有同样...

  • iOS 状态栏和导航栏的设置

    记录2篇比较全面的博客IOS状态栏和导航栏的控制问题iOS 更改状态栏、导航栏颜色的几种方法

  • iOS 状态栏和导航栏的设置

    记录2篇比较全面的博客IOS状态栏和导航栏的控制问题iOS 更改状态栏、导航栏颜色的几种方法

网友评论

      本文标题:解决状态栏和导航不一致的问题

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