99

更新到 Xcode 5 后,我所有应用程序视图中的导航栏都向下移动了。这是一些屏幕截图,第一个显示视图被下拉时的所有内容,第二个显示所有未触及的内容。搜索栏应该从导航栏开始。

所有内容 空闲的所有内容

有谁知道我该如何解决这个问题?

编辑:我已经尝试过这个以前的建议:

if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
        self.edgesForExtendedLayout = UIRectEdgeNone;

但它会产生非常奇怪的结果。

解决方案尝试

这可能是因为我在此视图控制器下有一个“幻灯片菜单”,由于导航栏的透明度而出现。

4

10 回答 10

237

导航栏的 translucent 属性设置为 NO

self.navigationController.navigationBar.translucent = NO;

这将修复视图在导航栏和状态栏下方的框架。

如果必须显示和隐藏导航栏,请使用

 if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
    self.edgesForExtendedLayout = UIRectEdgeNone;   // iOS 7 specific

在你的viewDidLoad方法中。

于 2013-09-23T07:11:27.917 回答
33

iOS 7默认情况下,所有控制器半透明属性值都是 YES,因此您为此问题设置半透明属性 NO。

self.navController.navigationBar.translucent = NO;
于 2013-09-23T07:11:26.480 回答
21

您可以在此屏幕的视图控制器的属性检查器中禁用“扩展边缘”(如下图所示):

在此处输入图像描述

于 2015-06-25T14:05:58.803 回答
12

这也适用于 iOS 8.1

navigationController?.navigationBar.translucent = false
于 2015-01-13T12:22:04.157 回答
8

如果你想保持你的半透明,在你navigationBar的末尾viewDidLoad或在你viewWillAppear添加这行代码:

[self.view sendSubviewToBack:self.tableView]

不知何故,如果您的scrollView子类(UITableView,UICollectionView等)在index当前视图中为 0 subviews,它将根据您的navigationBar. 它也不应该影响您在 iOS7 之前的版本中的 UI。


编辑 如果你UITableView以编程方式初始化你的,那么最好使用这个将它添加到视图中[self.view insertSubview:self.tableView atIndex:0];

于 2014-02-12T17:34:48.423 回答
4

斯威夫特 4

在 viewDidLoad 方法中设置以下代码行:

self.navigationController?.navigationBar.isTranslucent = false
于 2017-10-04T05:31:26.243 回答
3

您可以将此方法添加到您的视图控制器中,如以下URL所示:

-(void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    self.searchBar.frame = 
    CGRectMake(0, self.topOfViewOffset, self.searchBar.frame.size.width, self.searchBar.frame.size.height);
}
于 2013-11-22T11:29:08.970 回答
2

另一种方法是self.automaticallyAdjustsScrollViewInsets = YES;在您的视图控制器上进行设置。这是默认启用的。但在你的情况下:

我看到您正在使用 EGORefreshHeaderView。它与 UITableView 的 contentInset 一起播放。因此,当您释放它时,标题将重置顶部插图而不是恢复以前的值。

于 2014-04-05T19:55:17.470 回答
-1

如果您想完全控制视图并避免对 iOS 进行错误调整,请将 UITableView 子类化并调整 -(void)willMoveToWindow:(UIWindow *)newWindow 中的插图(滚动和指示器)。为我工作。

于 2014-06-04T21:38:39.513 回答
-4

另一种选择是以源代码模式打开 Info.plist 文件并输入以下信息:

<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>UIStatusBarHidden</key>
<true/>

希望这可以帮助。

于 2013-11-11T17:52:40.507 回答