我需要在应用程序中隐藏和显示状态栏,但当我使用setStatusBarHidden
执行此操作时,我的导航栏会更改它自己的框架(向上移动20pt)。内容视图相应地更改其自己的框架(它向上移动20磅并增加自己的高度)。我如何改变这种行为,并在状态栏显示或隐藏时让我的栏和内容保持静止?
我试图观察statusBarHidden
,并强制更改导航栏和内容视图的框架,但我认为这不是UI可伸缩性的最佳方式。也许还有更好的方法?
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([keyPath isEqualToString:@"statusBarHidden"]){
if ([change[NSKeyValueChangeNewKey] isEqual: @(1)]){
self.navigationBar.frame = ({CGRect newFrame = self.navigationBar.frame; newFrame.origin.y = 20; newFrame;});
}else {
self.navigationBar.frame = ({CGRect newFrame = self.navigationBar.frame; newFrame.origin.y = 20; newFrame;});
}
}
}
UPD-
尝试在我的内容视图控制器中使用这些设置:
self.edgesForExtendedLayout = UIRectEdgeNone;
-(BOOL)automaticallyAdjustsScrollViewInsets{
return NO;
}
-(BOOL)prefersStatusBarHidden{
return NO;
}
-(CGSize)preferredContentSize {
return CGSizeMake(320, 504);
}
对没有任何帮助
看来我找到了最好的解决方案。我不会用setStatusBarHidden
隐藏状态栏我将把它与新的不透明窗口重叠:
overlayWin = [[UIWindow alloc] init];
overlayWin.backgroundColor = NAVBAR_COLOR;
overlayWin.windowLevel = UIWindowLevelStatusBar+1.f;
overlayWin.frame = [UIApplication sharedApplication].statusBarFrame;
overlayWin.userInteractionEnabled = NO;
其他视图的布局没有不需要的副作用。美好的