【问题标题】:Navigation bar in UINavigationController too shortUINavigationController 中的导航栏太短
【发布时间】:2013-05-27 14:06:31
【问题描述】:

我正在组装一个应用程序,其中一些视图位于常规 UIViewController 中并使用它们自己的 UINavigationBar,而其他视图将成为 UINavigationController 内导航层次结构的一部分并使用它的 UINavigationBar。

问题是我看到的实际 UINavigationBars 在这两种情况下是不同的。使用 UINavigationController 的导航栏的那些看起来不自然地短。下面是一些图片,显示了我在 Interface Builder 中看到的内容与我在运行时看到的内容。

我无法弄清楚我在这里做错了什么。为什么导航栏的高度不同?我怎样才能使它们相同?

【问题讨论】:

  • 我不明白这个问题。看起来我在看一些图片中的导航栏和 uitoolbar。
  • Sam,这里没有涉及 UIToolbar 对象。 “评论”屏幕显示为模式对话框,所以我想要一个标题栏和一个按钮来关闭,所以我直接在视图中使用了 UINavigationBar。 “完成”按钮是一个 UIBarButtonItem。在“菜单”屏幕中,我有一个要呈现的屏幕层次结构,所以我创建了一个 UINavigationController,它当然有自己的内置 UINavigationBar。所以,简而言之,对我来说,使用 UINavigationController 最普通的方式是导航栏太短了。
  • @SamBudda(忘记在上一篇文章中提及您的用户名,现在编辑为时已晚。)
  • 现有行为是有意的并且是标准 iOS 行为。

标签: iphone uinavigationcontroller uinavigationbar uinavigationitem


【解决方案1】:

弄清楚这里发生了什么。 UINavigationController 会自动调整纵向导航栏的大小,据我所知,没有内置方法可以防止这种情况发生。然而,在这篇文章 (How to prevent autoresizing UINavigationBar on Landscape) 的帮助下,我能够让它按照我想要的方式工作。我的代码与链接帖子中的代码略有不同。我用过:

@implementation UINavigationBar (CustomHeight)

- (CGSize)sizeThatFits:(CGSize)size
{
    // Need to know the width of the window
    CGRect bounds = self.window.bounds;

    // Sometimes height and width are turned around. Take the largest of height and width as the real width.
    int width = (bounds.size.width > bounds.size.height) ? bounds.size.width : bounds.size.height;

    // Make sure that the 
    CGSize newSize = CGSizeMake(width, 44);
    return newSize;
}

我不确定是否有更好的方法来获得真正的宽度 - 以上内容很笨拙,但对我有用,因为我的应用程序只在横向运行。我更担心的是,Apple 在其 UINavigationBar 文档中说您不应该直接调整框架。但我想我不是直接这样做的。大概内部绘图方法会调用这个方法并做他们的事情。

无论如何,这对我有用。希望对其他人有所帮助。

【讨论】:

  • 您不应该调整导航栏的高度。在宽屏方向调整高度是标准的 iOS 行为。 (故意纵向为 44 点,横向则更少。)您为什么要这样做?
  • 只需检查 Apple 的任何应用程序,看看我在说什么。如果您正在自定义导航栏,您应该为宽屏提供较低的版本。
  • 感谢@nielsbot 的回复。我绝对赞同这样一种想法,即不应试图操纵操作系统提供的小部件超出其设计用途。在这种特殊情况下,主要是为了提供统一的体验。我还有另外两个屏幕,它们在概念上是我要修改的屏幕的同级屏幕,它们使用 UINavigationBar,它不在 UINavigationController 中显示。操作系统以高 (44 pt) 大小显示这些。因此,有两个屏幕带有高条和一个带有短条的屏幕看起来有点有趣。
  • 其他屏幕如何显示?听起来您有一个导航层次结构——不应该所有视图都显示在添加到导航堆栈的视图控制器中吗?
  • 啊.. 好吧,您可以在模态表中放置一个导航控制器,但只添加一个视图控制器。 (与使用独立的 UINavigationBar 相比)
【解决方案2】:

我真的相信您混淆了两种不同的功能。 UINaviationbar 和 UIToolbar。这是苹果的人类准则。查看文档顶部的导航栏

http://developer.apple.com/library/ios/#documentation/userexperience/conceptual/mobilehig/UIElementGuidelines/UIElementGuidelines.html#//apple_ref/doc/uid/TP40006556-CH13-SW41

我将尝试查看是否可以找到有关其尺寸的文档。这是一个。我相信有更好的可用

http://www.idev101.com/code/User_Interface/sizes.html

【讨论】:

    猜你喜欢
    • 2017-09-09
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    • 2013-10-31
    相关资源
    最近更新 更多