2015-05-19 161 views
1

我在表格的标题中有一个搜索栏,但它非常向下,当出现键盘时,搜索不可见。如果搜索栏太低且不可见,我该如何在表格中进行滚动?否则我不想改变它的位置。更改搜索栏的位置

下面是截图: enter image description here

,如果我改变搜索栏架我得到这个:

enter image description here

-(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; 
} 

回答

1

首先,你必须采用UISearchBarDelegate ProtocolUISearchBar ,在该协议中,您将需要两种委托方法来确定用户何时开始使用表格视图中的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将位于屏幕的顶部。

+0

您的ideea适用于更改框架,但为什么搜索栏的大小发生更改。我没有修改大小,只有原点。 –

+0

@AdinaMarin也许你正在把它移得太高,它似乎像搜索栏大小改变?如果你没有修改标题或搜索栏的大小,它不应该改变。 – Michael

+0

我用代码更新我的问题 –