好大一個坑。--談談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頂部有一個空白區域。
