自动布局和通话中的状态栏(Auto Layout and in-call status bar)

2019-09-02 05:39发布

我想请教一下自动布局和通话状态栏。 以下是一个演示我的问题一个简单的场景:

  1. 与“使用故事板”启用创建项目
  2. 添加“视图 - 控制器”,并启用其“在初始视图控制器”
  3. 控制器的视图集的背景颜色为红色
  4. 新增“表视图”到控制器的视图

表视图应具有4个布局约束(领先,顶部,后,底部)与常数设定为上海华为0。

现在,当我在模拟器中运行这个程序,然后按⌘+ T我可以看到红色的背景,而在通话状态栏的动画。是否有可能摆脱这种故障呢?

Answer 1:

(使用的答案,而不是评论由于缺乏声誉,对不起。)

我就遇到了这个问题,以及并尝试例如解决方案指出,上面:它没有为我工作。

所以,我创建了一个信息库与示例代码,露出原来的海报的问题。 有这些情景示例应用:

  1. 自定义视图控制器是窗口的根视图控制器,
  2. 自定义视图控制器是一个UINavigationController这是窗口的根视图控制器的孩子,
  3. 自定义视图控制器是一个的UITabBarController的孩子是窗口的根视图控制器和
  4. 自定义视图控制器是一个UINavigationController这是作为一个的UITabBarController是窗口的根视图控制器的孩子的孩子。

原来,在从CEarwood解决实际工作......当自定义视图控制器是一个UINavigationController的孩子(情况2和4)。 Hoewever,它不会在情况1和3的工作。

我希望这个信息是有用的。



Answer 2:

对于一个纯粹的自动布局回答您可以深究约束的引用,当接收到DidChange通知时收到UIApplicationWillChangeStatusBarFrameNotification并回到0调整其不变。 下面是我使用的测试VC:

@interface CEViewController ()

@property (nonatomic, strong) IBOutlet NSLayoutConstraint *bottomConstraint;

@end

@implementation CEViewController

- (void)viewDidLoad {
    [super viewDidLoad];        

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarFrameWillChange:) name:UIApplicationWillChangeStatusBarFrameNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarFrameDidChange:) name:UIApplicationDidChangeStatusBarFrameNotification object:nil];
}

- (void)statusBarFrameWillChange:(NSNotification *)note {
    NSValue *newFrameValue = [note userInfo][UIApplicationStatusBarFrameUserInfoKey];

    self.bottomConstraint.constant = newFrameValue.CGRectValue.size.height;
    [self.view setNeedsLayout];
}

- (void)statusBarFrameDidChange:(NSNotification *)note {
    self.bottomConstraint.constant = 0;
    [self.view setNeedsLayout];
}

@end


Answer 3:

这是从屏幕大小调整的效果。

当通话中状态栏显示,视图调整大小以它应该有通话中状态栏活跃的大小,然后为状态栏的变化大小下移。

对于一个短暂的瞬间,表视图下的视图是可见的。 你可以做的是向下延伸出来的画面来掩盖背景色表视图下添加视图。

另一种方法是用你AppDelegate ,实现:

-application:willChangeStatusBarFrame:

并调整表视图,以覆盖外露得到位。 然后,当- application:didChangeStatusBarFrame:被调用,调整回原来的大小。



文章来源: Auto Layout and in-call status bar