iOS hidesBarsOnSwipe 状态栏背景颜色
Posted
技术标签:
【中文标题】iOS hidesBarsOnSwipe 状态栏背景颜色【英文标题】:iOS hidesBarsOnSwipe status bar background color 【发布时间】:2015-06-01 21:19:58 【问题描述】:当我使用hidesBarsOnSwipe
属性滑动并隐藏导航栏时,状态栏有清晰的背景。如何将状态栏的背景设置为与导航栏相同的颜色?这里有几张显示我的问题的图片,这些都包含在UITableViewController
中。
分开
单独的图片,看起来像一张大的。
【问题讨论】:
【参考方案1】:我遇到了同样的问题,并且能够解决它。我对 ios 开发人员相当陌生,我不认为这个解决方案是万无一失的。我在其他地方找不到任何好的答案,所以这就是我克服它的方法:
-
我从 UITableViewController 转换为带有嵌套 UITableView 的 UIViewController。请注意,请仔细检查子表视图的委托是否设置为 UIViewController。
我添加了一个高度为 20 像素的视图和一个要设置为状态栏“背景”的背景颜色。设置该视图的约束如下:
在您的表格视图中,将约束设置为基本上全屏。这里有一个重要注意事项,顶部约束是“Top Layout Guide.Top”而不是“Top Layout Guide.Bottom”。默认情况下,我相信这个约束与底部有关。双击约束可以将其调整到顶部。没有这个,任何表格标题单元格都没有正确定位我
希望对您有所帮助。
【讨论】:
我还想我会提到,状态栏样式可能会在折叠时从浅色变为深色。在这种情况下,preferredStatusBarStyle 是您可以正确控制状态主题的地方。 ` override func preferredStatusBarStyle() -> UIStatusBarStyle return UIStatusBarStyle.LightContent ` 你不需要将视图的高度指定为20。只需将顶部约束添加到Superview.top = 0,将前导和尾随约束添加到safeArea,底部约束= 0与tableView 。最佳。这样,即使对于 iPhone X 和任何其他尺寸,视图也会自行拉伸到所需的高度。即使您旋转设备。 TableView 应该像往常一样受到约束:顶部、前导、尾随和底部 = 0 到 safeArea,或任何其他约束。重要的是 tableView.top 被约束到 safeArea 或 Superview.top,并且是视图层次结构中的第一个子视图。【参考方案2】:添加到 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
【讨论】:
【参考方案3】:根据 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];
【讨论】:
以上是关于iOS hidesBarsOnSwipe 状态栏背景颜色的主要内容,如果未能解决你的问题,请参考以下文章
UINavigationController 包含、iOS7 和状态栏。漏洞?
UINavigationController.hidesBarsOnSwipe=YES 导致 NSInternalInconsistencyException