更改搜索栏的位置
Change position for search bar
我在 table 的 header 中有一个搜索栏,但它很低,当键盘出现时,搜索不可见。当搜索栏太低且不可见时,如何在 table 中滚动?否则我不想改变它的位置。
截图如下:
如果我更改搜索栏的框架,我会得到:
-(BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {
if (self.searchBar.frame.origin.y>270) {
self.cowTableView.frame=CGRectMake(self.cowTableView.frame.origin.x,self.cowTableView.frame.origin.y-300,self.cowTableView.frame.size.width, self.cowTableView.frame.size.height);}
return YES;
}
- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar {
self.cowTableView.frame=CGRectMake(self.cowTableView.frame.origin.x,self.cowTableView.frame.origin.y+300,self.cowTableView.frame.size.width, self.cowTableView.frame.size.height);
return YES;
}
首先,您必须在 UISearchBar
上采用 UISearchBarDelegate Protocol,在该协议中,您将需要两个委托方法来确定用户何时开始和结束使用 UISearchBar
您的 table 视图 header.
-(BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {
//Called when user clicks search bar
return YES;
}
- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar {
return YES;
}
您确实需要确定 UISearchBar
在屏幕上的位置,因为我假设您总是希望它位于屏幕上的 (0,0)
处。要执行此操作,请调用 rectForRowAtIndexPath:
以获取 table 视图中单元格的当前 y-position。获得 y-position 后,您必须确定 table 视图的当前偏移量并使用该值设置 UISearchBar
的位置
//Determine the position of the cell relative to the screen origin
CGRect cellRect = [tableView rectForRowAtIndexPath:indexPath];
cellRect = CGRectOffset(cellRect, -self.tableView.contentOffset.x, -self.tableView.contentOffset.y);
现在 cellRect
将包含供您在 table 视图上调用 setContentOffset:animated:
的正确值。
[self.tableView setContentOffset:CGPointMake(cellRect.origin.x, self.tableView.contentOffset.y - cellRect.origin.y ) animated:YES];
现在您的 UISearchBar
将位于屏幕顶部。
我在 table 的 header 中有一个搜索栏,但它很低,当键盘出现时,搜索不可见。当搜索栏太低且不可见时,如何在 table 中滚动?否则我不想改变它的位置。
截图如下:
如果我更改搜索栏的框架,我会得到:
-(BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {
if (self.searchBar.frame.origin.y>270) {
self.cowTableView.frame=CGRectMake(self.cowTableView.frame.origin.x,self.cowTableView.frame.origin.y-300,self.cowTableView.frame.size.width, self.cowTableView.frame.size.height);}
return YES;
}
- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar {
self.cowTableView.frame=CGRectMake(self.cowTableView.frame.origin.x,self.cowTableView.frame.origin.y+300,self.cowTableView.frame.size.width, self.cowTableView.frame.size.height);
return YES;
}
首先,您必须在 UISearchBar
上采用 UISearchBarDelegate Protocol,在该协议中,您将需要两个委托方法来确定用户何时开始和结束使用 UISearchBar
您的 table 视图 header.
-(BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {
//Called when user clicks search bar
return YES;
}
- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar {
return YES;
}
您确实需要确定 UISearchBar
在屏幕上的位置,因为我假设您总是希望它位于屏幕上的 (0,0)
处。要执行此操作,请调用 rectForRowAtIndexPath:
以获取 table 视图中单元格的当前 y-position。获得 y-position 后,您必须确定 table 视图的当前偏移量并使用该值设置 UISearchBar
//Determine the position of the cell relative to the screen origin
CGRect cellRect = [tableView rectForRowAtIndexPath:indexPath];
cellRect = CGRectOffset(cellRect, -self.tableView.contentOffset.x, -self.tableView.contentOffset.y);
现在 cellRect
将包含供您在 table 视图上调用 setContentOffset:animated:
的正确值。
[self.tableView setContentOffset:CGPointMake(cellRect.origin.x, self.tableView.contentOffset.y - cellRect.origin.y ) animated:YES];
现在您的 UISearchBar
将位于屏幕顶部。