【问题标题】:UINavigationController bar covers its uiviewcontroller's contentUINavigationController 栏覆盖了它的 uiviewcontroller 的内容
【发布时间】:2023-03-25 02:35:02
【问题描述】:

我有一个 UIViewController,MyViewController,顶部有一个 UIToolbar。使用界面生成器,文档大纲如下所示:

View 
  - subview1
  - subview2
  - UIToolbar
     - Bar Button Item1
     - Bar Button Item2
     - Bar Button Item3

MyViewController 在我的整个应用程序中使用。有时它位于 UINavigationcontroller 中,有时位于 UIPopoverView 中。

当它出现在 UINavigationController 中时,导航栏覆盖了 UIToolbar 和 View 顶部附近的所有其他内容。在this screenshot 中,您可以看到 UIToolbar 被完全覆盖,带有绿色灯泡图像的 UIButton 被部分覆盖。

根据apple documentation

任何需要锚定到顶部和状态栏正下方的视图(即 UIToolbar、UIButton 等)都需要额外的工作才能正确放置。

它继续提供一个解决方案,该解决方案仅使用约束将 VC 的内容向下移动 x 像素,在我的例子中是 UIToolbar。这似乎不是一个好的解决方案,因为它假定您总是希望内容向下移动到导航栏下方。就我而言,我显然不这样做,因为 MyViewController 并不总是在 UINavigationController 中。当我使用这些文档中提供的约束解决方案时,在 MyViewController 不在 UINavigationController 中的所有情况下,UIToolbar 都会奇怪地从顶部向下浮动 x 个像素。

我是否遗漏了我应该如何在 UINavigationController 中显示 VC 的内容?非常感谢。

【问题讨论】:

  • 你能不能给一些代码
  • @ipinak 我添加了文档大纲详细信息和屏幕截图,但是除了 [navcntrl push:MyViewController] 之类的内容之外,这里实际上没有任何代码可以显示。这一切都在界面生成器中工作。如果我能提供更多有用的信息,请告诉我。谢谢,
  • 你在哪个 iOS 版本上运行?

标签: ios uiviewcontroller uinavigationcontroller uitoolbar nslayoutconstraint


【解决方案1】:

在iOS7中,UINavigationBar有translucent属性,UINavigationViewController的子VC的视图默认在UINavigationBar下面。

如果你不需要这个半透明效果,可以使用下面的代码关闭这个属性。

self.navigationController.navigationBar.translucent = NO

您也可以使用@ldindu 的方式。

【讨论】:

  • 这会使该栏完全透明。如果您不希望这样,您可能需要调整其背景颜色属性以将其更改为您需要的任何颜色(包括部分不透明度)
【解决方案2】:

如果你运行的是 iOS 7.0 版本,那么你需要设置以下 iOS 7.0 新引入的属性,如下所示

self.edgesForExtendedLayout = UIRectEdgeNone; 

默认情况下,edgeForExtendedLayout 属性设置为 UIRectEdgeAll,这意味着视图控制器默认使用全屏布局。

【讨论】:

  • 这是最好的答案,恕我直言
【解决方案3】:

确定您是否使用的是 iOS 7。

#define IS_IOS7 [[[UIDevice currentDevice] systemVersion] hasPrefix:@"7"];

- (float)topPadding
{
    return (IS_IOS7) ? 20.0f : 0.0f;
}

使用将框架的 Y 轴增加[self topPadding] 将其进一步向下移动。

希望您的问题得到解决。

【讨论】:

    【解决方案4】:

    如果用 Swift 编写,则为 edgesForExtendedLayout = UIRectEdge()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-13
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-03
      相关资源
      最近更新 更多