更新到 Xcode 5 后,我的所有应用程序视图中的导航栏都下移了。以下是一些屏幕截图,第一个显示了视图中拉下时的所有内容,第二个显示了所有未受影响的内容。搜索栏应从导航栏开始。
有人知道我该如何解决这个问题吗?
编辑:我已经尝试过这个之前的建议:
if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
self.edgesForExtendedLayout = UIRectEdgeNone;
但它会产生非常奇怪的结果。
这可能是因为我在该视图控制器下有一个“幻灯片菜单”,由于导航栏的透明度而出现。
将导航栏的半透明属性设置为NO:
self.navigationController.navigationBar.translucent = NO;
这将修复导航栏和状态栏下方的视图。
如果您必须显示和隐藏导航栏,请使用
if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
self.edgesForExtendedLayout = UIRectEdgeNone; // iOS 7 specific
用你的
viewDidLoad
方法。
在
iOS 7
默认情况下所有Controller的半透明属性值为YES,所以针对这个问题设置半透明属性为NO。
self.navController.navigationBar.translucent = NO;
这也适用于 iOS 8.1 上的 swift
navigationController?.navigationBar.translucent = false
如果您想保持
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:
在 viewDidLoad 方法中设置以下代码行:
self.navigationController?.navigationBar.isTranslucent = false
您可以将此方法添加到视图控制器中,如以下URL所示:
-(void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
self.searchBar.frame =
CGRectMake(0, self.topOfViewOffset, self.searchBar.frame.size.width, self.searchBar.frame.size.height);
}
另一种方法是在视图控制器上设置
self.automaticallyAdjustsScrollViewInsets = YES;
。
默认情况下启用此功能。但就你而言:
我看到您正在使用 EGORefreshHeaderView。它与 UITableView 的 contentInset 一起使用。因此,当您释放它时,标题将重置顶部插图,而不是恢复以前的值。
如果您想完全控制视图并避免 iOS 的错误调整,请子类化 UITableView 并调整
-(void)willMoveToWindow:(UIWindow *)newWindow
中的插图(滚动和指示器)。对我有用。
另一种选择是在源代码模式下打开 Info.plist 文件并输入以下信息:
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>UIStatusBarHidden</key>
<true/>
希望这有帮助。