好大一个坑。--谈谈view偏移问题:
先上张图,
图中白色部分。上面的是从网上找的资源。将导航栏隐藏之后用collectionView加上去而实现的滑动标签功能。开始以为是代码中的问题。然后仔细推敲了一遍别人代码中的相关模块。发现过了一天并没有找到解决的地方。我一直以为是哪儿设置的属性。例如frame什么的。今天早上来了之后。有钻研了下。发现了几个没有看到过的属性。可疑。的确可疑。
然后改了之后发现问题解决了。
先提出这两个属性吧。
sele.edgesForExtendedLayout 属性
self.automaticallyAdjustsScrollViewInsets 属性
在IOS7以后viewController开始使用全屏布局的,而且是默认的行为通常涉及到布局就离不开这个属性edgesForExtendedlayout, 它是一个类型为UIExtendedEdge的属性,指定边缘要延伸的方向。它的默认值很自然地是UIRectEdgeAll,四周边缘均延伸,也就是说,如果即使视图中有navigationBar,下有tabBar,那么视图仍会延伸覆盖到四周的区域。因为一般为了不让tableview不延伸到navigationBar下面,属性设置为UIRectEdgeNone。
那么此时发现导航栏变灰了,这样设置: self.navigationController,navigationbar.translucent = No;
*NavigationBar的translucent属性:看下官方API文档。
翻译过来大致是 :translucent默认属性是yes,如果navigationBar有自定义的背景图,那么当属性置为Yes,且放了一张不透明的图,那么效果是自动会把这个图弄成半透明;
如果设置为No,放了一半透明的图:
如果barstyle是UIBarStyleBlack,效果是半透明的图自动加上黑色背景。
如果是UIBarStyleDefault,效果是半透明的图自动加上白色背景。
如果设置了barTintColor,效果是半透明的图自动加上barTintColor的背景。
IOS7 viewController新增属性automaticallyAdjustsScrollViewInsets,即是否根据按所在界面的navigationBar与tabbar的高度,自动调整scrollview的inset。
即UITableView顶部有一个空白区域。