UISearchController向上偏移64處理

weixin_34377065發表於2017-10-19

1.導航欄translucent屬性

這個BOOL屬效能控制UITabBar/UINavigationBar的半透明效果,預設為YES.

UINavigationBar/UITabBar的translucent屬性官方解釋:
預設為YES,可以通過設定NO來強制使用非透明背景,
如果導航條使用自定義背景圖片,那麼預設情況該屬性的值由圖片的alpha(透明度)決定,如果alpha的透明度小於1.0值為YES。
如果手動設定translucent為YES並且使用自定義不透明圖片,那麼會自動設定系統透明度(小於1.0)在這個圖片上。
如果手動設定translucent為NO並且使用自定義帶透明度(透明度小於0)的圖片,那麼系統會展示這張背景圖片,只不過這張圖片會使用事先確定的barTintColor進行不透明處理,若barTintColor為空,則會使用UIBarStyleBlack(黑色)或者UIBarStyleDefault(白色)。

UIScrollView
translucent = YES,的時候 系統自動為scrollView增加了-頂部64px的內邊距-底部49px的內邊距,正好是導航欄高度+狀態列高度以及TabBar高度。

translucent = NO,scrollView內容將會被擋住。解決方法:

self.automaticallyAdjustsScrollViewInsets = NO,

if (@available(iOS 11.0, *)){
        [[UIScrollView appearance] setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever];
    }

非UIScrollView
1.translucent = YES,的時候,檢視會向下偏移64,解決辦法:translucent = NO
2.既要translucent = YES,也需要正常顯示,解決方法:
2.1手動修改frame佈局,從64開始佈局,底部同理。
2.2修改viewController的edgesForExtendedLayout屬性,edgesForExtendedLayout = UIRectEdgeNone

UISearchController
translucent = NO,在點選搜尋,動畫之後整個searchBar跑出螢幕外,解決辦法:

self.navigationController.extendedLayoutIncludesOpaqueBars = YES;

extendedLayoutIncludesOpaqueBars意思是額外佈局是否包括不透明的Bar,預設為NO,意味著如果導航條或者TabBar非透明,view內容不會被他們遮擋,如果該屬性設定為YES,那麼在導航條或者TabBar非透明的情況下,view的內容將會被他們遮擋(原點為0,0),該屬性僅僅對非透明的Bar控制元件有效。

蘋果對UIViewController提供了以下幾個屬性供開發者使用:

@property(nonatomic,assign) BOOL wantsFullScreenLayout NS_DEPRECATED_IOS(3_0, 7_0) __TVOS_PROHIBITED; // Deprecated in 7_0, Replaced by the following:

@property(nonatomic,assign) UIRectEdge edgesForExtendedLayout NS_AVAILABLE_IOS(7_0); // Defaults to UIRectEdgeAll

@property(nonatomic,assign) BOOL extendedLayoutIncludesOpaqueBars NS_AVAILABLE_IOS(7_0); // Defaults to NO, but bars are translucent by default on 7_0.  

@property(nonatomic,assign) BOOL automaticallyAdjustsScrollViewInsets API_DEPRECATED_WITH_REPLACEMENT("Use UIScrollView's contentInsetAdjustmentBehavior instead", ios(7.0,11.0),tvos(7.0,11.0)); // Defaults to YES

相關文章