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