UIViewController的View顯示在導航欄下面如何解決?

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這里不是測試對象

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容