当用户在通话状态栏中时,导航栏布局出现异常

Posted

技术标签:

【中文标题】当用户在通话状态栏中时,导航栏布局出现异常【英文标题】:NavigationBar Layout has an exception when user has in call status bar 【发布时间】:2018-09-07 19:12:12 【问题描述】:

在我切换通话状态栏后,导航栏消失。而后面的内容高度为 20 。

我不知道为什么。

图为现场。

看起来导航栏掉了。蓝条掉下来。

从视图层级调试器看,不知道为什么蓝条和导航栏有距离。

这里是相关代码。

- (void)viewWillLayoutSubviews
      self.blueBar.translatesAutoresizingMaskIntoConstraints = NO;
      [super viewWillLayoutSubviews];
      [self.blueBar.topAnchor constraintEqualToAnchor: self.view.topAnchor].active = YES;
      [self.blueBar.leadingAnchor constraintEqualToAnchor: self.view.leadingAnchor].active = YES;
      [self.blueBar.trailingAnchor constraintEqualToAnchor: self.view.trailingAnchor].active = YES;
      [self.blueBar.heightAnchor constraintEqualToConstant: 75].active = YES;
      ......



-(UIView *)blueBar
    if(!_blueBar)
        _blueBar = [[UIView alloc] init];
        _blueBar.backgroundColor = [UIColor blueColor];
    
    return _blueBar;

【问题讨论】:

【参考方案1】:

通话时状态栏高度从20变为40。我发现你使用tableView,所以试试这个:

if (@available(ios 11.0, *)) 
    self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
 else 
    self.automaticallyAdjustsScrollViewInsets = NO;

还有,为什么不用主流框架Masonry

【讨论】:

苹果的布局约束(第二版)非常好用。在斯威夫特。

以上是关于当用户在通话状态栏中时,导航栏布局出现异常的主要内容,如果未能解决你的问题,请参考以下文章

iOS 状态栏活动应用

在启用通话状态栏的情况下打开应用程序时的 iOS 标签栏问题

通话状态栏更改时查看调整大小[重复]

当隐藏状态栏时,有没有办法防止布局“跳跃”?

状态栏处于“通话中”模式时显示模式对话框后导航栏位置错误

使用自定义模式演示处理通话状态栏