我(就像这里的其他所有人一样)遇到了其他所有人都在碰到的同一状态栏重叠问题,这就是为什么我要对此提出一个新问题。

似乎有某种机制可以让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来调整它们

07-28 11:16