ios7之前的版本中UIViewController中的view在顯示后會自動調(diào)整為去掉導航欄的高度的缆巧,控件會自動在導航欄以下擺放布持。
在iOS7中UIViewController的wantsFullScreenLayout屬性被舍棄了,所有的UIViewController創(chuàng)建后默認就是full Screen的陕悬,因此如果帶導航欄的應用界面中的部分控件會被導航欄覆蓋掉题暖。
解決方案:可以使用ios7中UIViewController新增的屬性extendLayoutIncludesOpaqueBars和edgesForExtendedLayout來解決。
其中這個屬性指定了當bar使用不透明圖片時,試圖是否延伸至bar所在區(qū)域胧卤,默認值為NO唯绍。而edgesForExtendedLayout
其中這個屬性指定了當Bar使用了不透明圖片時,視圖是否延伸至Bar所在區(qū)域枝誊,默認值時NO况芒。而edgesForExtendedLayout則是表示視圖是否覆蓋到四周的區(qū)域,默認是UIRectEdgeAll叶撒,即上下左右四個方向都會覆蓋绝骚,那么為讓頂部不進行延伸到導航欄覆蓋的區(qū)域,我們可以把頂部區(qū)域延伸去掉痊乾。
上面是抄來的(看不懂沒關系), 下面才是重點:
UIViewController的View和導航欄的顯示是這樣的, 默認的, 如果導航欄設置為有透明度的(默認就是半透明的), UIViewController的View就會被導航欄覆蓋
如果不想被覆蓋, 可以使用以下代碼解決(控制器中調(diào)用):
self.edgesForExtendedLayout = UIRectEdgeNone;
反之, 如果導航欄是不透明的, 默認UIViewController的View就會往下移, 在導航欄下顯示, 如果不想往下移, 可以實現(xiàn)如下代碼(控制器中調(diào)用):
self.extendedLayoutIncludesOpaqueBars = YES;
ps: 僅對UIViewController而言, UITableViewController這里不是測試對象