在导航控制器中默认隐藏UITableViewsearch栏
我已经阅读了多篇文章,但对我来说这不正常。 我正在使用最新的4.2 SDK。
我有的代码是
self.tableView.contentOffset = CGPointMake(0.0, 44.0);
这部分工作,它将search栏上移一点点,但不会完全隐藏。 我已经尝试增加价值44更大的东西,这并没有影响甚么! 我在表的视图控制器的viewDidLoad方法中调用此代码。 有没有人有任何想法?
另一种方法应该是…在viewDidLoad调用:
self.tableView.contentInset = UIEdgeInsetsMake(-self.searchDisplayController.searchBar.frame.size.height, 0, 0, 0);
并实现endDragging委托方法:
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{ CGPoint offset = self.tableView.contentOffset; CGFloat barHeight = self.searchDisplayController.searchBar.frame.size.height; if (offset.y <= barHeight/2.0f) { self.tableView.contentInset = UIEdgeInsetsZero; } else { self.tableView.contentInset = UIEdgeInsetsMake(-barHeight, 0, 0, 0); } self.tableView.contentOffset = offset; }
设置内容是去除一些“闪烁”
如果你想让search栏粘在顶部,执行didScroll这样:
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{ CGRect sbFrame = self.searchDisplayController.searchBar.frame; sbFrame.origin.y = self.tableView.contentOffset.y; if (sbFrame.origin.y > 0) { sbFrame.origin.y = 0; } self.searchDisplayController.searchBar.frame = sbFrame; }
我希望这会有所帮助(花了我几天的时间弄清楚:))
干杯!
更新:
作为@carbonr指出你应该添加这一行viewDidLoad自iOS7 +
self.edgesForExtendedLayout = UIRectEdgeNone;
self.tableView.contentOffset = CGPointMake(0.0, 44.0);
上面的代码实际上工作,但它需要在UITableView完成所有单元的创build之后运行。 我想这是另一个问题,但。
您可以在viewDidLoad
设置表视图的初始界限,所以search栏显示为隐藏在开始处。
您必须创buildsearchBar
属性,然后使用以下代码:
- (void)viewDidLoad { //... CGRect bounds = self.tableView.bounds; bounds.origin.y = self.tableView.bounds.origin.y + searchBar.bounds.size.height; self.tableView.bounds = bounds; //... }
对于其他人仍在寻找更新的解决scheme,你可以在这里查看我的答案。
基本上你需要在第一次调用viewDidLayoutSubviews
更新contentOffset
。
我也有像你一样的问题。 下面的代码解决了我的问题。请在viewDidLoad()中添加代码:
self.edgesForExtendedLayout = UIRectEdgeNone;
N:B:我在我的项目中使用了autoLayout。