Iphone UINavigationController中的导航栏太短

Iphone UINavigationController中的导航栏太短,iphone,uinavigationcontroller,uinavigationbar,uinavigationitem,Iphone,Uinavigationcontroller,Uinavigationbar,Uinavigationitem,我正在开发一个应用程序,其中一些视图位于常规UIViewController中,并使用它们自己的UINavigationBar,而其他视图则是UINavigationController中导航层次结构的一部分,并使用其UINavigationBar 问题是,我看到的实际uinavigationbar在这两种情况下是不同的。其中使用UINavigationController导航栏的部分看起来异常短。下面是一些图片,显示了我在Interface Builder中看到的内容与我在运行时看到的内容

我正在开发一个应用程序,其中一些视图位于常规UIViewController中,并使用它们自己的UINavigationBar,而其他视图则是UINavigationController中导航层次结构的一部分,并使用其UINavigationBar

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


我搞不清楚我做错了什么。为什么导航栏的高度不同?我怎样才能使它们相同呢?

我真的相信你混淆了两种不同的功能。UINaviationbar和UIToolbar。以下是苹果的人性化指南。查看文档顶部的导航栏

我将试着看看是否能找到关于它们尺寸的文档。这里有一个。我相信还有更好的


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

@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;
}
我不确定是否有更好的方法来获得真正的宽度——上面的方法很笨重,但对我来说很有用,因为我的应用程序只在横向运行。我更担心的是,苹果在其UINavigationBar文档中说,你不应该直接调整框架。但我想我不是直接这么做的;据推测,内部绘图方法将调用此方法并执行它们的操作


不管怎样,这对我很有用。希望它能帮助其他人。

我不明白这个问题。看起来我在看一些图片中的导航栏和uitoolbar。Sam,这里没有涉及uitoolbar对象。“Reviews”屏幕显示为一个模式对话框,因此我需要一个标题栏和一个按钮来关闭,所以我直接在视图中使用了UINavigationBar。“完成”按钮是一个UIBarButtonItem。在“菜单”屏幕中,我有一个显示屏幕的层次结构,因此我创建了一个UINavigationController,它当然有自己的内置UINavigationBar。因此,简而言之,对于我来说,使用UINavigationController最普通的方式就是导航栏太短。@SamBudda(在上一篇文章中忘记提到您的用户名,现在编辑已经太迟了。)现有的行为是预期的,是标准的iOS行为。您不应该调整导航栏的高度。在宽屏幕方向上调整其高度是iOS的标准行为。(在纵向图上是44点,在横向图上是更少的。)你为什么要这样做?只要看看苹果的应用程序就知道我在说什么了。如果您正在自定义导航栏,您应该为宽屏幕提供一个不太高的版本。谢谢您的回复,@nielsbot。我绝对赞同这样一种观点,即人们不应该试图操纵操作系统提供的小部件,使其超出其设计目的。在这种特殊情况下,主要是提供统一的体验。我还有另外两个屏幕,它们在概念上是我试图修改的一个屏幕的同级屏幕,它们使用的是UINavigationBar,而UINavigationController中没有显示。操作系统显示了这些高(44磅)的尺寸。所以有两个屏幕是高条的,一个屏幕是短条的,看起来有点滑稽。其他的屏幕是怎么显示的?听起来您有一个导航层次结构——难道不应该在添加到导航堆栈的视图控制器中显示所有视图吗?啊。。嗯,您可以在模式表中放置导航控制器,但只向其中添加一个视图控制器。(相对于使用独立的
UINavigationBar