【发布时间】:2011-06-28 23:40:32
【问题描述】:
我是第一次使用 UISearchBar,但不能完全按照我的意愿行事。
当您激活范围按钮时,它们会覆盖表格的第一行。查看所有搜索结果的唯一方法似乎是在编辑完成后隐藏范围按钮;在我的谷歌搜索中,我看到了这个建议。
我想要 Mail 具有的功能,只要搜索框中有文本,范围按钮就会一直显示,并且您可以看到搜索结果会随着您更改活动范围按钮而发生变化。但是如果没有范围按钮覆盖表格的第一行,我想不出任何方法来实现这一点。您不能只向下滚动表格视图;搜索栏位于表格视图的标题中,因此整个内容一起滚动。
建议赞赏!
在尝试了以下 Andrew 的建议后更新。
我忘记的一件事是,在 viewDidAppear 中,我向上滚动表格视图内容,这样搜索框就离开了屏幕顶部,但可以在需要时向下滚动。这显然是我的问题的一部分。所以,在 viewDidAppear 我有
if (theSearchBar.showsScopeBar != YES) {
[self.tableView setContentOffset:CGPointMake(0, 44) animated:YES];
}
在 searchBarShouldBeginEditing 中,我现在有:
[self.navigationController setNavigationBarHidden:YES];
[self.tableView setContentOffset:CGPointMake(0, -44) animated:YES];
[UIView beginAnimations:@"searchBarUp" context:nil];
[UIView setAnimationDuration:1.0f];
searchBar.frame = CGRectOffset(searchBar.frame, 0, -44);
[UIView commitAnimations];
这给出了正确的结果,但是当范围栏出现时,视图顶部和搜索栏顶部之间存在间隙,并且第一行被覆盖。然后滚动条(带有范围按钮)向上滑动到位。这显然看起来不太好。
我希望上面的代码做的是:
隐藏导航栏,这会将表格的第一行放在状态栏的正下方
向下滚动表格内容,这会将搜索栏的顶部放在状态栏的正下方
向上移动搜索栏,使搜索栏底部之间有 44 像素的间隙,由范围按钮填充
这似乎确实发生了,除了您可以看到导航栏留下的间隙,直到滚动条向上移动以满足它。你会认为这可以通过最后隐藏导航栏来解决,但是没有......当我尝试时,我最终发现表格的第一行都覆盖了 和之间的导航栏大小的孔状态和搜索栏。
我觉得很奇怪的另一件事是,如果我按原样使用上面的代码 sn-p,除了在调用 setContentOffset 时使用动画:NO,我会得到不同的结果。在这种情况下,表格的第一行没有被覆盖,但搜索框位于视图顶部上方,无法向下滚动(不会留下)。只有范围按钮可见。对我来说,仅仅关闭动画就会改变结果是没有意义的。
现在,您可能认为如果所有内容都放在正确的位置,那么显示搜索结果就可以了。但不是。即使现在导航栏已经不在画面中了,但搜索栏仍然在其上方出现了很大的空隙,并且需要对表格内容和搜索栏框架进行相同的调整。
我要注意 viewWillAppear 中的代码只执行一次,因为我们从不离开视图,所以不是每次都向上重新调整表格。
我很想了解发生了什么,以及如何解决它,如果有人可以帮助阐明一些问题。
为了清楚起见再次更新 - 当我说“修复它”时,我的意思是让它看起来很好,当部件移动到位时没有明显的间隙。我什至不一定希望它动画化。滑入位置需要太长时间。但正如我上面提到的,关闭动画会使事情再次出现在错误的地方。
最后一次更新 - 我通过移除线条周围的动画块来移动搜索栏,让它看起来好多了。我猜这在动画开始之前引入了暂停。现在已经足够好了,至少目前是这样。我仍然接受安德鲁的回答,因为他把我引向了正确的方向。
【问题讨论】:
-
以一种非常老套的方式,删除并重新添加到表格视图的标题中,以便它知道它已被调整大小?
标签: iphone ios uitableview uisearchbar