【问题标题】:can't set to "UIBarPositionTopAttached" on navigationBar无法在导航栏上设置为“UIBarPositionTopAttached”
【发布时间】:2015-08-31 05:03:16
【问题描述】:

我创建了UIViewController,它有navigationController 作为父级(在情节提要中连接), 我想将导航栏的图片应用于状态栏背景。

但似乎statusBar不能像“半透明”这样的状态,

我试着设置

- (void)viewWillAppear:(BOOL)animated {    
 [self.navigationController.navigationBar setBackgroundImage:[UIImage
 imageNamed:@"barTop.png"] forBarPosition:UIBarPositionTopAttached 
 barMetrics:UIBarMetricsDefault];

 [self setNeedsStatusBarAppearanceUpdate];
 ....

}
- (UIStatusBarStyle)preferredStatusBarStyle {
  return UIStatusBarStyleLightContent;
}

UIViewController.

但是导航和状态栏的背景已经分开了。

我尝试将 plist 文件设置为“基于控制器的状态栏外观”YES 和 NO。但我仍然无法从 viewController 配置 statusBar。 我在这个公告板中找不到同样的问题。

有人知道解决方案吗?或者如何调试?

感谢您的阅读。

(9/3 补充:我想为 navigationBar 和 statusBar 一起制作背景。

在一个navigationController和一个ViewController这样简单的情况下,两个bar可以一起做背景(默认)。

现在当我通过情节提要让 tabBarController 指示多个 navigationController 时遇到了问题。)

【问题讨论】:

  • 状态栏还是导航栏?
  • 你想要哪种状态栏?
  • 告诉我颜色,透明还是不透明。
  • >Saheb Roy 我想将navigationBar 的显示扩展到屏幕的上限
  • >Arpit Parekh 我想让 statusBar 透明。

标签: ios objective-c


【解决方案1】:

根据 Apple 的状态栏,状态栏是透明的。(我认为*总是,不确定)。链接在这里。 https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/Bars.html

【讨论】:

  • 谢谢,是的,似乎 statusBar 在默认情况下是透明的,但在我的应用程序中却没有。现在我假设 statusBar 已经是透明的,但是 navigationBar 放在带有状态栏的 Coordinate 下。然后我在 viewController po self.navigationController.navigationBar 处尝试使用断点,但输出低于错误:在“id”类型的对象上找不到属性“navigationBar”错误:解析表达式时出现 1 个错误
  • 亲爱的朋友,现在你先给我答案,结果是什么。 po self.navigationController
  • 表示print-object(gdb),self.navigationController的结果是
  • 还是出错了。我注意到我已经成功地改变了状态栏的样式,但是当它的视图来自于一种 tabBarViewController 时,navigaitonBar 不能成为状态栏的背景。是否有任何情况下该方法或委托来配置导航栏的状态?是否有任何方法或委托可以自己显式配置导航栏的状态?
  • 非常安静地写每一件事。
【解决方案2】:

虽然我在几个月前找到了这个解决方案,但还是花了一些时间来对齐。

检查导致问题的viewController结构,发现statusBar的黑色是self.window.backgroundColor。 所以这意味着状态栏和navigationController原本是成功透明的,我的viewController是对齐的(20, 0)。这是这个问题的根源。 我发现这个问题源于应用 contentInsets 设置。 此设置也会影响 view.subviews[0]。

在某些情况下会发生这种情况 •uiViewController 的视图通过 UInavigationController 显示 •edgesForExtendedLayout 处于活动状态 •view 的第一个元素是一种 UIScrollView 或这些子类 (来自日本公告牌)

为了解决这个问题,我最初在 storyBoard 上制作了 navigationController 以与这些插图设置分开,然后我明确地将其原点设置为 (0,0) 我在我的 viewController 上设置了 automaticAdjustsScrollViewInsets = NO。

之后,我终于可以将viewController的origin设置为(0,0),并且我将navigationBar的背面设置为statusBar的背面。

下面的链接包含很多有用的信息。 iOS 7 status bar back to iOS 6 default style in iPhone app?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多