更改搜索栏的位置
问题描述:
我在表格的标题中有一个搜索栏,但它非常向下,当出现键盘时,搜索不可见。如果搜索栏太低且不可见,我该如何在表格中进行滚动?否则我不想改变它的位置。更改搜索栏的位置
下面是截图:
,如果我改变搜索栏架我得到这个:
-(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;
}
答
首先,你必须采用UISearchBarDelegate Protocol您UISearchBar
,在该协议中,您将需要两种委托方法来确定用户何时开始使用表格视图中的UISearchBar
的标题。
-(BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {
//Called when user clicks search bar
return YES;
}
- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar {
return YES;
}
你需要确定屏幕上的UISearchBar
的位置,因为我相信你会一直希望它是在(0,0)
在屏幕上。要做到这一点,请拨打rectForRowAtIndexPath:
以获取表格视图内您当前的单元格的y位置。一旦你的y位置,你必须确定当前的表视图的偏移量,并使用该值来设置的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
位置将包含正确的值,你在你的桌子打电话setContentOffset:animated:
视图。
[self.tableView setContentOffset:CGPointMake(cellRect.origin.x, self.tableView.contentOffset.y - cellRect.origin.y) animated:YES];
现在您的UISearchBar
将位于屏幕的顶部。
您的ideea适用于更改框架,但为什么搜索栏的大小发生更改。我没有修改大小,只有原点。 –
@AdinaMarin也许你正在把它移得太高,它似乎像搜索栏大小改变?如果你没有修改标题或搜索栏的大小,它不应该改变。 – Michael
我用代码更新我的问题 –