【问题标题】:Change Navigation Bar Height更改导航栏高度
【发布时间】:2017-01-18 17:32:06
【问题描述】:

我正在尝试了解如何更改导航栏的高度。每当我在我的应用程序中插入一个时,它都比 Apple 的股票应用程序(例如消息和设置)中使用的所有导航栏都要短。我希望它达到那个高度,因为当我尝试添加一个栏按钮时,它与状态栏冲突。我还读到,作为开发人员,您不应该更改导航栏的高度,所以我有点困惑。最后,我查看了这个 Stack Overflow 页面:How can I change height of Navigation Bar Swift 3。 我尝试实现代码...

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    let height: CGFloat = 50 //whatever height you want
    let bounds = self.navigationController!.navigationBar.bounds
    self.navigationController?.navigationBar.frame = CGRect(x: 0, y: 0, width: bounds.width, height: bounds.height + height)

}

...但是当我这样做时我的应用程序崩溃了。 我正在使用 Xcode 8.2 beta 和 Swift 3。

【问题讨论】:

  • 显示导致崩溃的代码。
  • @toddg override fund viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) let height: CGFloat = 50 let bounds = self.navigationController!.navigationBar.bounds self.navigationController?.navigationBar. frame = CGRect(x: 0, y: 0, width: bounds.width, height: bounds.height + height) }
  • 编辑您的问题并将代码放在那里。
  • 我现在这样做了@toddg
  • 它可能与self.navigationController!.navigationBar.bounds 在线崩溃,对吧?如果是这种情况,则可能由于不存在navigationController 而发生崩溃。

标签: ios swift xcode uinavigationbar


【解决方案1】:

我不认为您可以更改导航栏的大小。 但这就是我建议您这样做的方式。

  1. 移除默认导航栏。

  2. 创建一个类似于您设计的导航栏的视图添加约束> 前导、尾随、顶部和高度 看法。所以基本上用你的设计将它固定在顶部、左侧和右侧 高度。

  3. 如果需要,向左和向右添加 2 个按钮,看起来类似于导航栏。添加按钮约束>前导,顶部,底部和 左侧和尾随的宽度,顶部,底部和右侧的宽度。
  4. 添加一个 UILabel 作为导航栏标题。添加标签约束,左键前导,右键尾随,顶部 底部是您创建的导航视图。制作uilabel文本 居中。

在这里,你有你的自定义导航栏。 在每个控制器上,您所要做的就是在另一个控制器上添加 CMD+C 和 CMD+V 添加前导、尾随和顶部约束。 希望它有所帮助。

【讨论】:

  • 这绝对是有帮助的(虽然我不确定为什么 Apple 不让开发人员更改导航栏的高度),但随后出现了第二个问题。获取普通按钮如何看起来像条形按钮。我试图使按钮看起来像一个“X”,这很容易使用条形按钮(将其设置为系统项下的“停止”),但不是(据我所知)使用普通按钮。
  • @AEquinox01 您所要做的就是从设计中获得类似 png 的 X 并将其设置为按钮图像,将按钮设为系统按钮,而不是自定义按钮,并且您可以在色调颜色中更改该 X 颜色无论你需要什么。如果您需要更多帮助,请告诉我如果这对您有帮助,请接受答案。
  • 我似乎找不到 png - 你能更详细地解释一下如何做到这一点吗? @弗洛伦特
  • @AEquinox01 设计师是否为您的应用提供X按钮png图像?
  • 感谢 Florentt -- 我确实投了赞成票,但我的声誉太低,无法显示,抱歉...
【解决方案2】:

添加一个独立的导航栏并使其与正常的导航栏高度和旋转功能相匹配是可能的,而且很简单。 Here is how to do it (link includes a video):

在界面生成器中:

  • 将 UINavigationBar 添加到您的视图中,位于顶部布局指南位置。

  • 设置前导空格到容器边距、尾随空格到容器边距和顶部空间到容器的约束 — 全部取消选择“相对于边距”并且常量值为 0(零)。

  • 选中导航栏后,在 Identity Inspector 中添加一个名为 barPosition 的关键路径。给它一个Number 类型和3 的值。

这应该就是你所需要的。但是,如果您已经完成了这些步骤,并且您的项目似乎不喜欢关键路径,那么请继续执行以下操作:

  • 从导航栏的身份检查器中删除 barPosition 键路径。
  • 将导航栏的 IBOutlet 添加到您的视图控制器。
  • 将您的视图控制器设置为UINavigationBarDelegate
  • 将委托方法func position(for bar: UIBarPositioning) -> UIBarPosition 添加到您的视图控制器,并返回值UIBarPosition.topAttached

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    • 2015-11-15
    • 2013-11-22
    相关资源
    最近更新 更多