我(就像这里的其他所有人一样)遇到了其他所有人都在碰到的同一状态栏重叠问题,这就是为什么我要对此提出一个新问题。
似乎有某种机制可以让UISearchBar知道自己将其放置在哪里,这完全是不明智的。
jaredsinclair在这里回答(iOS 7 status bar back to iOS 6 default style in iPhone app?),详细解释了Apple工程师如何允许我们向应用程序中引入逻辑,以便尽可能地与用户环境融合。
我仔细检查了应用程序中的每个UIViewController并进行了最小的修改。
在大多数情况下,我可以使用下面的代码在多个SO答案中找到解决问题的方法
// Do any additional setup after loading the view.
if ([self respondsToSelector:@selector(edgesForExtendedLayout)]){
self.edgesForExtendedLayout = UIRectEdgeNone;
}
但是,无论我在隐藏UINavigationBar的特定视图中做什么,这都行不通。
基于在SO中找到的解决方案,我能够通过将以下逻辑添加到此特定UIViewController中来解决此问题
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame];
viewFrame.origin.y = viewFrame.origin.y+statusBarFrame.size.height;
}
根据状态栏的高度,这会将UIViewController向下推n个像素。
效果在这里显示
问题是,当我输入搜索字段时,UISearchBar自身会在顶部添加20px的填充,这会偏移整个UI。
这使我得出以下结论:UISearchBar会尝试进行自我调整,并且碰巧它会自行调整与状态栏高度完全相同的数量。
如果我不修改位置,则一旦输入搜索字段,此自动调整功能就会将UISearchBar整齐地对齐状态栏下方。
我希望我已经详细说明了我的困惑,我想知道是否有人对解决方案有任何想法。
最佳答案
如果导航栏可见,请在ViewDidLoad中执行以下操作:
self.edgesForExtendedLayout = UIRectEdgeNone;
导航栏的隐藏状态在ViewDidLoad中执行以下操作:
通过将所有UIView元素移动20pt来调整它们