我使用Interface Builder创建了一个表视图,并在其中添加库的搜索栏和搜索显示控制器以添加搜索功能。但是,IB对其进行了设置,以便在第一次显示视图时,该条显示在屏幕顶部。
我想知道如何在默认情况下隐藏搜索栏,但仍然可以在表视图中滚动(参见Apple的Mail应用程序的示例)。我尝试在viewDidLoad
中调用scrollRectToVisible:animated:
来向下滚动表视图,但无济于事。默认情况下隐藏搜索栏的首选方式是什么?
发布于 2009-07-06 09:55:54
首先,要确保将UISearchBar添加到UITableView的tableHeaderView中,以便它与表的内容一起滚动,而不是固定在视图的顶部。
搜索栏不会被计入表视图中的一行,所以如果你将表视图的顶部滚动到第一行,它会“隐藏”搜索栏:
[yourTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];
或者在Swift中:
yourTableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0), atScrollPosition: UITableViewScrollPosition.Top, animated: false)
确保在包含数据之前不要滚动表视图(如果给定的indexPath没有指向有效行(即如果表视图为空),scrollToRowAtIndexPath
将引发异常)。
发布于 2012-03-09 18:55:34
不要将UISearchBar添加为UITableView的子视图,这是不必要的。
UITableView有一个tableHeaderView属性,非常适合这样做:
- (void) viewDidLoad {
[super viewDidLoad];
self.searchBar = [[[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)] autorelease];
self.searchBar.showsCancelButton = YES;
self.searchBar.delegate = self;
self.tableView.tableHeaderView = self.searchBar;
}
如果您不想默认看到它:
- (void) viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.tableView setContentOffset:CGPointMake(0, 44)];
}
我还获得了取消按钮,以再次隐藏它...(并移除键盘)
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
[self.tableView setContentOffset:CGPointMake(0, 44) animated:YES];
[self.searchBar resignFirstResponder];
}
发布于 2016-09-20 07:01:29
对于Swift 3+
我这样做了:
声明此var
var searchController = UISearchController()
在viewDidLoad()
方法中
searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.hidesNavigationBarDuringPresentation = false
searchController.dimsBackgroundDuringPresentation = true
searchController.searchBar.placeholder = NSLocalizedString("Search", comment: "")
definesPresentationContext = true
tableView.tableHeaderView = searchController.searchBar
tableView.contentOffset = CGPoint(x: 0, y: searchController.searchBar.frame.size.height)
https://stackoverflow.com/questions/1081381
复制相似问题