UISearchBar 向下移动的 Bug

问题:
我把searchBar设置为tableHeadView,但是来回的点击searchBar的取消和搜索时会产生Bug:searchBar会往下移动20的间距。

解决方法:
在viewController中设置一下两个个属性即可:

self.extendedLayoutIncludesOpaqueBars = YES;
self.edgesForExtendedLayout = UIRectEdgeNone;

以下下转载自:http://www.jianshu.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为自适应。这里自适应其实就是空出状态栏的位置。

解决问题的帖子:
http://stackoverflow.com/questions/20565980/uisearchbar-in-uitableviewheader-strange-animation-on-ios-7-8

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容