问题:
我把searchBar设置为tableHeadView,但是来回的点击searchBar的取消和搜索时会产生Bug:searchBar会往下移动20的间距。
解决方法:
在viewController中设置一下两个个属性即可:
self.extendedLayoutIncludesOpaqueBars = YES;
self.edgesForExtendedLayout = UIRectEdgeNone;
以下下转载自://www.greatytc.com/p/45ad9fa3f47f
以上三个属性都是iOS7以后添加的:
iOS7之后,Apple弃用了之前用于全屏显示的属性wantsFullScreenLayout,而改用edgesForExtendedLayout,并添加了其他2个用于方便AutoLayout布局UIScrollView及其继承控件的属性
@property(nonatomic,assign) BOOL automaticallyAdjustsScrollViewInsets NS_AVAILABLE_IOS(7_0); // Defaults to YES
@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) UIRectEdge edgesForExtendedLayout NS_AVAILABLE_IOS(7_0); // Defaults to UIRectEdgeAll
对于以上三个属性查阅资料后得到结果:
-
edgesForExtendedLayout:类型为UIRectEdge,有以下值可供选择,默认值为UIRectEdgeAll,即:四边都和父视图贴合。
typedef NS_OPTIONS(NSUInteger, UIRectEdge) { UIRectEdgeNone = 0, UIRectEdgeTop = 1 << 0, UIRectEdgeLeft = 1 << 1, UIRectEdgeBottom = 1 << 2, UIRectEdgeRight = 1 << 3, UIRectEdgeAll = UIRectEdgeTop | UIRectEdgeLeft | UIRectEdgeBottom | UIRectEdgeRight } NS_ENUM_AVAILABLE_IOS(7_0);
-
extendedLayoutIncludesOpaqueBars:默认值为NO,这个属性在状态栏不透明的状态下才生效。也就是说,一般使用这个属性应该这样使用:
// 状态栏不透明(必须设置,并且为NO) self.navigationController.navigationBar.translucent = NO; // 视图延伸不考虑透明的Bars(这里包含导航栏和状态栏) // 意思就是延伸到边界 self.extendedLayoutIncludesOpaqueBars=YES; // 意思就是空出导航栏位置 self.extendedLayoutIncludesOpaqueBars=NO;
automaticallyAdjustsScrollViewInsets:默认值为YES,如果是UIScroolview以及继承自它的控件,默认值YES是设置它的Insets为自适应。这里自适应其实就是空出状态栏的位置。