0

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

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

常规视图控制器中的视图,它有自己的导航栏 UINavigationController + 内容视图控制器设置 模拟器中的第一个视图 模拟器中的第二个视图——注意导航栏太短了!

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

4

2 回答 2

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

于 2013-05-31T20:25:12.420 回答
0

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

@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 文档中说您不应该直接调整框架。但我想我不是直接这样做的。大概内部绘图方法会调用这个方法并做他们的事情。

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

于 2013-06-07T01:43:15.183 回答