23

布局有问题。

这是它在 iOS6 上的样子:

在此处输入图像描述

这是在 iOS7 上的外观:

在此处输入图像描述

但没关系。就像Apple 的 iOS7 TransitionGuide中描述的那样, 我在- (void)viewDidLoad

        self.edgesForExtendedLayout = UIRectEdgeNone;

现在它看起来像这样:

在此处输入图像描述

有什么建议么?我的布局有什么问题?我想要纯蓝色 UINavigationBar。而且不知道为什么顶部是透明的。有什么想法,为什么看起来如此奇怪?我怎样才能解决这个问题?

4

3 回答 3

31

尝试navigationBar.translucent = NO;

YES默认情况下。

UINavigationBar文档中:

iOS 7 上的新行为。默认为 YES。您可以通过将属性设置为 NO 来强制使用不透明背景。如果导航栏有自定义背景图像,则默认值是从图像的 alpha 值推断出来的——如果它有任何 alpha < 1.0 的像素,则为 YES 如果您将 setTranslucent:YES 发送到具有不透明自定义背景图像的栏,它将适用图像的系统不透明度小于 1.0。如果您将 setTranslucent:NO 发送到具有半透明自定义背景图像的条形图,它将使用条形图的 barTintColor(如果已定义)为图像提供不透明背景,如果 barTintColor 为 nil,则为 UIBarStyleBlack 或白色为 UIBarStyleDefault。

于 2013-09-13T15:05:19.533 回答
8

将此行添加到您的“将出现的视图”方法中(如果不存在,请键入:

- (void)viewWillAppear:(BOOL)animated
{

    [super viewWillAppear:animate];

}

)

然后,在 viewWillAppear 的底部,在 [self viewWillAppear:] 行下方,添加以下代码:

if([self respondsToSelector:@selector(edgesForExtendedLayout)])
    [self setEdgesForExtendedLayout:UIRectEdgeBottom];

这将使顶部栏(导航栏)变得不透明。在 iOS 7 中,Obj-C 现在对导航栏是否设置为不透明做出不同的响应,这是一个很好的方法来证明它在 iOS 6 和 7 中都可以工作(这样做有一些问题:

navigationBar.translucent = NO;

)

希望这会有所帮助,当我将应用程序转换为 iOS 7 时,我遇到了同样的问题,并且花了很长时间才找到解决方案!

于 2013-09-25T09:03:37.510 回答
4

在 IOS7 UINavigationBar 样式默认为半透明,因此它将隐藏视图内容下方,以显示您的内容在 UINavigation 栏下,在给定方法中写下以下代码段。

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    if([self respondsToSelector:@selector(edgesForExtendedLayout)])
        [self setEdgesForExtendedLayout:UIRectEdgeBottom];
}
于 2013-09-24T12:50:10.960 回答