我想请教一下自动布局和通话状态栏。 以下是一个演示我的问题一个简单的场景:
- 与“使用故事板”启用创建项目
- 添加“视图 - 控制器”,并启用其“在初始视图控制器”
- 控制器的视图集的背景颜色为红色
- 新增“表视图”到控制器的视图
表视图应具有4个布局约束(领先,顶部,后,底部)与常数设定为上海华为0。
现在,当我在模拟器中运行这个程序,然后按⌘+ T我可以看到红色的背景,而在通话状态栏的动画。是否有可能摆脱这种故障呢?
我想请教一下自动布局和通话状态栏。 以下是一个演示我的问题一个简单的场景:
表视图应具有4个布局约束(领先,顶部,后,底部)与常数设定为上海华为0。
现在,当我在模拟器中运行这个程序,然后按⌘+ T我可以看到红色的背景,而在通话状态栏的动画。是否有可能摆脱这种故障呢?
(使用的答案,而不是评论由于缺乏声誉,对不起。)
我就遇到了这个问题,以及并尝试例如解决方案指出,上面:它没有为我工作。
所以,我创建了一个信息库与示例代码,露出原来的海报的问题。 有这些情景示例应用:
原来,在从CEarwood解决实际工作......当自定义视图控制器是一个UINavigationController的孩子(情况2和4)。 Hoewever,它不会在情况1和3的工作。
我希望这个信息是有用的。
对于一个纯粹的自动布局回答您可以深究约束的引用,当接收到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
这是从屏幕大小调整的效果。
当通话中状态栏显示,视图调整大小以它应该有通话中状态栏活跃的大小,然后为状态栏的变化大小下移。
对于一个短暂的瞬间,表视图下的视图是可见的。 你可以做的是向下延伸出来的画面来掩盖背景色表视图下添加视图。
另一种方法是用你AppDelegate
,实现:
-application:willChangeStatusBarFrame:
并调整表视图,以覆盖外露得到位。 然后,当- application:didChangeStatusBarFrame:
被调用,调整回原来的大小。