如何防止 UINavigationBar 在 iOS 7 中覆盖视图顶部?

问题描述 投票:0回答:10

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

All Content All Content on Idle

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

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

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

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

Solution Attempt

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

ios objective-c ios7 uinavigationbar uistatusbar
10个回答
238
投票

导航栏的半透明属性设置为NO

self.navigationController.navigationBar.translucent = NO;

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

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

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

用你的

viewDidLoad
方法。


33
投票

iOS 7
默认情况下所有Controller的半透明属性值为YES,所以针对这个问题设置半透明属性为NO

self.navController.navigationBar.translucent = NO;

21
投票

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


12
投票

这也适用于 iOS 8.1 上的 swift

navigationController?.navigationBar.translucent = false

8
投票

如果您想保持

navigationBar
的半透明度,请在
viewDidLoad
的末尾或在
viewWillAppear
中添加以下代码行:

[self.view sendSubviewToBack:self.tableView]

不知何故,如果您的

scrollView
子类(
UITableView
UICollectionView
等)在当前视图
index
中位于
subviews
0,它将根据您的
navigationBar
自动调整插图。而且它也不应该影响 iOS7 之前版本中的 UI。


编辑 如果您以编程方式初始化

UITableView
,那么最好使用此
[self.view insertSubview:self.tableView atIndex:0];

将其添加到视图中

4
投票

斯威夫特4

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

self.navigationController?.navigationBar.isTranslucent = false

3
投票

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

-(void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    self.searchBar.frame = 
    CGRectMake(0, self.topOfViewOffset, self.searchBar.frame.size.width, self.searchBar.frame.size.height);
}

2
投票

另一种方法是在视图控制器上设置

self.automaticallyAdjustsScrollViewInsets = YES;
。 默认情况下启用此功能。但就你而言:

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


-1
投票

如果您想完全控制视图并避免 iOS 的错误调整,请子类化 UITableView 并调整

-(void)willMoveToWindow:(UIWindow *)newWindow
中的插图(滚动和指示器)。对我有用。


-4
投票

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

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

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.