导航栏透明渐变
一般导航栏透明渐变需求都会是在有
TableView
或者ScrollView
的页面进行,此时该如何对这些视图进行布局才能避免在代码中因为tabBar和navigationBar的高度影响而写一些判断逻辑呢?
针对以上问题需要了解清楚以下几个属性:
// 布局相关API
@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 NS_AVAILABLE_IOS(7_0); // Defaults to YES
// tabBar和navigationBar的半透明属性相关API
@property (nonatomic, getter=isTranslucent) BOOL trancslucent NS_AVAILABLE_IOS(7_0);
注意:
- 在
- (void)viewDidLoad
方法中得到的frame始终为显示屏幕的frame,当我们需要对页面进行布局时正确的方式是在- (void)viewWillLayoutSubviews
中处理,此方法中控制器view的frame才会受以上属性影响。 - 若控制器是由
Storyboard
或者xib
加载出来,需注意右侧Utilities
面板Attributes inspector
菜单下View Controller
对应的属性是否已经设置。
参考来源: