如何防止UINavigationBar覆盖iOS 7的视图顶部?
在更新到Xcode 5之后,我的所有应用程序视图中的导航栏都向下移动。 这里有一些截图,第一个显示视图中的所有内容,第二个显示所有内容。 search栏应该从导航栏的位置开始。
任何人都知道我可以解决这个问题?
编辑:我已经尝试过以前的build议:
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
,默认情况下, 所有控制器半透明属性值均为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
等)在您当前的视图subviews
中的index
0处,它将根据您的navigationBar
自动调整插入。 iOS7之前的版本也不会影响你的用户界面。
编辑如果你以编程方式初始化你的UITableView
,那么最好使用这个[self.view insertSubview:self.tableView atIndex:0];
将其添加到视图[self.view insertSubview:self.tableView atIndex:0];
您可以将此方法添加到您的视图控制器中,如以下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。 所以当你释放它时,标题将重置顶部插入而不是恢复以前的值。
Swift 4 :
在viewDidLoad方法中设置以下代码行:
self.navigationController?.navigationBar.isTranslucent = false
如果你想完全控制视图,并避免错误的iOS调整,UITableView的子类,并调整 – (void)willMoveToWindow:(UIWindow *)newWindow中的插入(滚动和指标)。 为我工作。
另一个select是在源代码模式下打开Info.plist文件并input以下信息:
<key>UIViewControllerBasedStatusBarAppearance</key> <false/> <key>UIStatusBarHidden</key> <true/>
希望这可以帮助。