【问题标题】:What method is called when UINavigationController is presented?呈现 UINavigationController 时调用什么方法?
【发布时间】:2015-06-15 03:49:26
【问题描述】:

我正在尝试继承 UINavigationController 以在其 UINavigationBar 下添加自定义子视图。问题是当我将我的自定义UINavigationController 设置为我的windowrootViewController 时,UINavigationBar 的位置发生了变化,所以我想相应地更新我的自定义视图的位置。我的问题是我应该把我的代码放在哪里来更新我的自定义视图。

    var navController = TabbedNavigationController(rootViewController: firstView)

    // navController.navigationBar.frame.origin.y = 0
    self.window?.rootViewController = navController
    self.window?.makeKeyAndVisible()
    // navController.navigationBar.frame.origin.y = 20.0

【问题讨论】:

  • 你见过苹果的Customizing UINavigationbar sample code吗?他们有一个具体的例子展示了如何扩展导航栏以适应控件。
  • @PetahChristian 是也不是。事实上,它们扩展导航栏;他们只是在其下方放置另一个视图。这在 UINavigationController 中根本不起作用; Apple 使用 presented 视图控制器作弊。

标签: ios uinavigationcontroller


【解决方案1】:

您要做的是响应导航控制器视图的子视图的定位。子视图的定位称为layout,发生在layoutSubviews。因此,您可以尝试实现viewDidLayoutSubviews,它在layoutSubviews 之后立即调用。请注意,它可以被多次调用,但您可能只想添加一次子视图,因此请注意添加适当的守卫。

【讨论】:

  • 谢谢!找到了 layoutSubview 方法但不知道它是如何链接到控制器的!
  • 我已经成功定位了我的自定义视图,但遇到了另一个问题,即我的 viewController 的视图将隐藏在我的自定义视图控制器下方。你知道我怎么能解决这个问题吗?谢谢
  • @doog 你了解视图是如何从后到前分层的吗?
  • 有点,你是说我应该把我的子视图放在同一层视图控制器的视图和导航栏上吗?
  • 我建议您负责视图的去向。
【解决方案2】:

您可以强制 ViewController 的“视图”延伸到 UINavigationBar 下方。这里有一些代码可以帮助你,它不是 Swift,而是 ObjC,但你会明白的。这是来自我的 UIVeiwController 子类的自定义实现。我还有一个完整的 UINavigationController 和 UINavigationBar 实现来调整 UINavigationBar 的大小。我可以告诉你,你可以按照我在此处链接的代码来做 Apple 在他们的示例中所做的事情。

[[[self navigationController] navigationBar] setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
[[[self navigationController] navigationBar] setShadowImage:[UIImage new]];
[[[self navigationController] navigationBar] setTranslucent:TRUE];
[[[[self navigationController] navigationBar] layer] setShadowOpacity:0.0f];
[[[[self navigationController] navigationBar] layer] setShadowOffset:CGSizeMake(0.0f, 0.0f)];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多