【发布时间】:2015-06-01 21:19:58
【问题描述】:
当我使用hidesBarsOnSwipe 属性滑动并隐藏导航栏时,状态栏有清晰的背景。如何将状态栏的背景设置为与导航栏相同的颜色?这里有几张显示我的问题的图片,这些都包含在UITableViewController中。
分开
单独的图片,看起来像一张大的。
【问题讨论】:
标签: ios objective-c uinavigationcontroller statusbar
当我使用hidesBarsOnSwipe 属性滑动并隐藏导航栏时,状态栏有清晰的背景。如何将状态栏的背景设置为与导航栏相同的颜色?这里有几张显示我的问题的图片,这些都包含在UITableViewController中。
分开
单独的图片,看起来像一张大的。
【问题讨论】:
标签: ios objective-c uinavigationcontroller statusbar
我遇到了同样的问题,并且能够解决它。我对 iOS 开发人员相当陌生,我不认为这个解决方案是万无一失的。我在其他地方找不到任何好的答案,所以这就是我克服它的方法:
我添加了一个高度为 20 像素的视图和一个要设置为状态栏“背景”的背景颜色。设置该视图的约束如下:
在您的表格视图中,将约束设置为基本上全屏。这里有一个重要注意事项,顶部约束是“Top Layout Guide.Top”而不是“Top Layout Guide.Bottom”。默认情况下,我相信这个约束与底部有关。双击约束可以将其调整到顶部。没有这个,任何表格标题单元格都没有正确定位我
希望对您有所帮助。
【讨论】:
添加到 George Huber 的答案。我通过在 viewDidLoad 方法中添加一个 20pt 高度的 UIView 作为 navigationController 的视图属性的子视图,以编程方式解决了这个问题。
- (void)viewDidLoad
{
[super viewDidLoad];
UIView *statusBarBG = [[UIView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.bounds), 20)];
statusBarBG.backgroundColor = [UIColor navBar];
[self.navigationController.view addSubview:statusBarBG];
// REST OF CODE
}
【讨论】:
根据 skg 的回答,我根据 iOS 版本添加了状态栏的相对高度。
self.navigationController.hidesBarsOnSwipe = true;
// add a UIView as subView to navigationController
CGFloat statusBarHeight;
if (@available(iOS 13, *)) {
NSArray *windows = UIApplication.sharedApplication.windows;
UIWindow *keyWindow = nil;
for (UIWindow *window in windows) {
if (window.isKeyWindow) {
keyWindow = window;
break;
}
}
statusBarHeight = keyWindow.windowScene.statusBarManager.statusBarFrame.size.height;
NSLog(@"statusBarHeight: %f", statusBarHeight);
} else {
statusBarHeight = UIApplication.sharedApplication.statusBarFrame.size.height;
}
UIView *statusBarBG = [[UIView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.bounds), statusBarHeight)];
statusBarBG.backgroundColor = [UIColor systemBackgroundColor];
[self.navigationController.view addSubview:statusBarBG];
【讨论】: