UINavigationController中的导航栏太短

时间:2013-05-31 17:18:48

标签: iphone uinavigationcontroller uinavigationbar uinavigationitem

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

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

A view in a regular view controller, which has its own navigation bar A UINavigationController + content view controller setup The first view in the simulator The second view in the simulator -- note the way-too-short navigation bar!

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

弄清楚这里发生了什么。 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文档中说你不应该直接调整框架。但我想我不是直接这样做的;据推测,内部绘图方法会调用此方法并执行它们的操作。

无论如何,这对我有用。希望它可以帮助别人。