另一种方法应该是...在 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;
}
设置内容是为了去除一些“闪烁”
如果您希望搜索栏位于顶部,请以这种方式实现 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;