【问题标题】:iOS hidesBarsOnSwipe status bar background coloriOS hidesBarsOnSwipe 状态栏背景颜色
【发布时间】:2015-06-01 21:19:58
【问题描述】:

当我使用hidesBarsOnSwipe 属性滑动并隐藏导航栏时,状态栏有清晰的背景。如何将状态栏的背景设置为与导航栏相同的颜色?这里有几张显示我的问题的图片,这些都包含在UITableViewController中。

分开

单独的图片,看起来像一张大的。

【问题讨论】:

    标签: ios objective-c uinavigationcontroller statusbar


    【解决方案1】:

    我遇到了同样的问题,并且能够解决它。我对 iOS 开发人员相当陌生,我不认为这个解决方案是万无一失的。我在其他地方找不到任何好的答案,所以这就是我克服它的方法:

    1. 我从 UITableViewController 转换为带有嵌套 UITableView 的 UIViewController。请注意,请仔细检查子表视图的委托是否设置为 UIViewController。
    2. 我添加了一个高度为 20 像素的视图和一个要设置为状态栏“背景”的背景颜色。设置该视图的约束如下:

    3. 在您的表格视图中,将约束设置为基本上全屏。这里有一个重要注意事项,顶部约束是“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];
      

      【讨论】:

        猜你喜欢
        • 2018-04-10
        • 2016-10-16
        • 1970-01-01
        • 2020-01-26
        • 1970-01-01
        • 1970-01-01
        • 2015-09-26
        • 2015-08-01
        相关资源
        最近更新 更多