IOS开发之Bug--iOS7View被导航栏遮挡问题的解决

Posted HeYang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IOS开发之Bug--iOS7View被导航栏遮挡问题的解决相关的知识,希望对你有一定的参考价值。

 

在实际开发中,遇到在UITextView的frame等于当前控制器的View的frame的情况下,然后运行的时候,发现控制器的Frame的高度y值会从导航条的位置64变化到0。

导致UITextView的frame也跟着一起移动。

这个问题本质其实就是ios7View被导航栏遮挡问题,于是经过百度搜索到答案。特此下面 复制拷贝 做个简单的笔记:

self.navigationController.navigationBar.translucent = NO;

如果在iPad上用了split view,并且设置了UINavigationBar的background image,现象为状态栏一直是一片漆黑
UINavigationController will alter the height of its UINavigationBar to either 44 points or 64 points, depending on a rather strange and undocumented set of constraints. If the UINavigationController detects that the top of its view’s frame is visually contiguous with its UIWindow’s top, then it draws its navigation bar with a height of 64 points. If its view’s top is not contiguous with the UIWindow’s top (even if off by only one point), then it draws its navigation bar in the “traditional” way with a height of 44 points. This logic is performed by UINavigationController even if it is several children down inside the view controller hierarchy of your application. There is no way to prevent this behavior.



意思就是UINavigationBar的高度会自行调整为44或者64,没有确定的预测方法。而之前作为UINavigationBar背景的图片是44高度的。最后换了张64高度,上面留了20px透明的图片搞定
 
网友还有一种解决办法
IOS7的视图有个边缘延伸的属性:edgesForExtendedLayout,
其默认值是UIExtendedEdgeAll。
只要将其改成UIExtendedEdgeNone即可,要注意的是在IOS7以下版本会出现bug。
所以在UIViewController 的viewDidLoad里加上下面代码就完美解决了这个问题
 
if( ([[[UIDevice currentDevice] systemVersion] doubleValue]>=7.0)) {
        self.edgesForExtendedLayout = UIRectEdgeNone;
        self.extendedLayoutIncludesOpaqueBars = NO;
        self.modalPresentationCapturesStatusBarAppearance = NO;
}






















以上是关于IOS开发之Bug--iOS7View被导航栏遮挡问题的解决的主要内容,如果未能解决你的问题,请参考以下文章

ios微信网页出现底部返回导航栏

ViewController - (0,0) 处的主视图元素被导航栏遮挡

android 显示内容被底部导航栏遮挡

android 显示内容被底部导航栏遮挡

iOS 7 UITableView 使用透明的导航栏和工具栏

Android知识串讲(1) 底部导航栏遮挡转屏锁定ActionBar隐藏