更新到Xcode 5后,我所有应用程序视图中的导航栏都向下移动 . 下面是一些截图,第一个显示视图中的所有内容,因为它被拉下来,第二个显示所有内容都未触及 . 搜索栏应从导航栏开始 .
有谁知道如何解决这个问题?
编辑:我之前尝试过这个建议:
if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
self.edgesForExtendedLayout = UIRectEdgeNone;
但它产生了非常奇怪的结果 .
这可能是因为我在此视图控制器下面有一个“幻灯片菜单”,由于导航栏的透明度而出现 .
11 回答
设置 navigation bar's translucent property to NO :
这将修复视图在导航栏和状态栏下面的框架 .
如果您必须显示和隐藏导航栏,请使用
在你的
viewDidLoad
方法中 .在
iOS 7
中默认为 all Controller translucent property value is YES, so you set translucent property NO ,用于此问题 .您可以在此屏幕的View Controller的属性检查器中禁用“扩展边缘”(如下图所示):
这适用于iOS 8.1上的swift
如果你想在你的
navigationBar
,viewDidLoad
或viewWillAppear
的末尾保持半透明度,请添加以下代码:不知何故,如果您的
scrollView
子类(UITableView
,UICollectionView
等)在当前视图subviews
中位于index
0,它将根据您的navigationBar
自动调整插入 . 它也不应该影响iOS7之前版本的UI .EDIT 如果以编程方式初始化
UITableView
,则最好使用此[self.view insertSubview:self.tableView atIndex:0];
将其添加到视图中您可以将此方法添加到视图控制器中,如URL所示:
Swift 4 :
在viewDidLoad方法中设置以下代码行:
另一种方法是在视图控制器上设置
self.automaticallyAdjustsScrollViewInsets = YES;
. 默认情况下启用此选项 . 但在你的情况下:我看到你正在使用EGORefreshHeaderView . 它使用UITableView的contentInset . 因此,当您释放它时, Headers 将重置顶部插入而不是恢复以前的值 .
上述答案可能会解决您的问题,但会引发许多其他问题,例如:自定义视图不以Y为中心,因为导航栏变得不透明,因此它会压低您的所有视图 .
拥有半透明导航栏不会导致此问题,也不会导致您在iOS 11中发布的问题 . 但是我没有找到解决办法让它适用于从iOS 9开始的所有iOS平台 .
如果你想完全控制视图并避免错误调整iOS,可以在UITableView子类中调整insets(滚动和指示符) - (void)willMoveToWindow:(UIWindow *)newWindow . 适合我 .
另一个选项是以源代码模式打开Info.plist文件并输入以下信息:
希望这可以帮助 .