当我点击UISearchBar时,它会移动到视图顶部

5

我有一个UITableView,它没有占满整个视图。大约两倍于UITableView的视图大小。

然后,我从“Object Library”添加了“Search Bar and Search Display Controller”到UITableView中。因此,可视化地说,搜索栏出现在屏幕中心。

这是我的视图:

enter image description here

我的问题:当我点击搜索框进行搜索时,搜索栏会跑到视图顶部,取代导航栏!而且转换非常糟糕...我该如何限制搜索栏保持在其初始位置?


@giorashc 你是否为 self.searchDisplayController 或者 self.searchDisplayController.searchResultsTableView 设置了框架?试着为它设置一个框架,然后告诉我。 - the1pawan
使用简单的UISearchBar代替UISearchDisplayController。 - iEinstein
@the1pawan 我尝试通过修改表视图的框架来移动它,但是没有成功。在我的情况下,我不在意搜索栏在顶部,但是它留在表视图中的空白空间是我的问题。 - giorashc
@Erzékiel,你不需要强制使用那些方法,还有其他选择。 - Ilario
请查看此链接,似乎是相同的问题。 https://dev59.com/O2Mk5IYBdhLWcg3w2BTJ#18988959 - lbsweek
显示剩余4条评论
1个回答

5
问题与搜索显示控制器有关。当你的TableView上有视图时,你无法控制动画,而且它似乎处理不好这个问题。我们曾经遇到了完全相同的问题,最简单的解决方法是在Storyboard中用一个简单的搜索栏替换搜索显示控制器。
这意味着你的类现在必须实现搜索栏的委托方法才能正常工作。
为了正确地进行动画,只需像这样覆盖searchBarTextDidBeginEditing和searchBarTextDidEndEditing:
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar {
CGRect tableViewFrame = self.tableView.frame;
tableViewFrame.origin.y = tableViewFrame.origin.y - self.yourHeaderView.bounds.size.height;
[UIView animateWithDuration:0.25
                 animations:^{ self.tableView.frame = tableViewFrame; }];
}

- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar {
CGRect tableViewFrame = self.tableView.frame;
tableViewFrame.origin.y = tableViewFrame.origin.y + self.yourHeaderView.bounds.size.height;
[UIView animateWithDuration:0.25
                 animations:^{ self.tableView.frame = tableViewFrame; }];
}

简单来说,您只需根据表视图的高度将其框架移动到视图上。 动画使其更加平滑和清晰。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接