iOS 7 UINavigationBar - UIView布局问题

sky*_*der 23 iphone user-interface uinavigationbar uitableview ios7

布局有问题.

以下是它在iOS6上的外观:

在此输入图像描述

以下是iOS7的外观:

在此输入图像描述

但没关系.就像在Apple的iOS7 TransitionGuide中描述的那样, 我又写了一笔- (void)viewDidLoad

        self.edgesForExtendedLayout = UIRectEdgeNone;
Run Code Online (Sandbox Code Playgroud)

它现在看起来像这样:

在此输入图像描述

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

nul*_*ull 31

尝试 navigationBar.translucent = NO;

它是YES默认的.

UINavigationBar文档:

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


Jac*_*mon 8

将此行添加到"view will appear"方法中(如果不存在,请键入以下内容添加:

- (void)viewWillAppear:(BOOL)animated
{

    [super viewWillAppear:animate];

}
Run Code Online (Sandbox Code Playgroud)

)

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

if([self respondsToSelector:@selector(edgesForExtendedLayout)])
    [self setEdgesForExtendedLayout:UIRectEdgeBottom];
Run Code Online (Sandbox Code Playgroud)

这将使顶部栏(导航栏)变得不透明.在iOS 7中,Obj-C现在对导航条是否设置为不透明有不同的反应,这是一个很好的方法来保证它在iOS 6和7中都有效(有一些问题只是:

navigationBar.translucent = NO;
Run Code Online (Sandbox Code Playgroud)

)

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