我(就像这里的每个人一样)遇到了其他人一样的状态栏重叠问题,只是有点扭曲,这就是为什么我要对这个问题提出一个新的问题。
似乎有一些机制可以让UISearchBar知道自己在哪里定位,这是完全不正常的。
jaredsinclair answer here (iOS 7 status bar back to iOS 6 default style in iPhone app?),非常详细地解释了苹果工程师如何允许我们在应用程序中引入逻辑,以便尽可能多地融入用户的环境。
我仔细检查了应用程序中的每个UIViewController,并尽可能地进行了最轻微的修改。
在大多数情况下,我能够使用下面的代码来解决这个问题,我发现这些代码跨越了几个SO答案
// Do any additional setup after loading the view.
if ([self respondsToSelector:@selector(edgesForExtendedLayout)]){
self.edgesForExtendedLayout = UIRectEdgeNone;
}
但是,无论我在隐藏UINavigationBar的特定视图中执行什么操作,这都不会起作用。
基于所找到的解决方案,因此我能够通过向这个特定的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整齐地对齐到状态栏下面。
我希望我已经详细说明了我的困惑,我想知道是否有人对解决方案有任何想法。
发布于 2013-10-04 17:33:19
如果navigationBar可见,请在ViewDidLoad中执行以下操作:
self.edgesForExtendedLayout = UIRectEdgeNone;
如果navigationBar处于隐藏状态,请在ViewDidLoad中执行以下操作:
通过将所有UIView元素移位20pt来调整它们
发布于 2013-09-24 20:39:32
也在这个问题上苦苦挣扎。您需要将其放入您的ViewControllers viewDidLoad方法中。
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {
self.edgesForExtendedLayout = UIRectEdgeNone;
}
这个应该可以解决这个问题。这在iOS 7过渡指南中也有说明。https://developer.apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/AppearanceCustomization.html#//apple_ref/doc/uid/TP40013174-CH15-SW1
发布于 2013-09-27 18:39:33
UISearchBar为你想要的东西提供了一个委托方法。只需将其从顶部放置20px即可。
- (UIBarPosition)positionForBar:(id <UIBarPositioning>)bar
{
return UIBarPositionTopAttached;
}
不幸的是,它不能与UISearchDisplayController一起工作。
https://stackoverflow.com/questions/18975920
复制相似问题