Iphone UISearchBar';s范围按钮覆盖第一行结果
我第一次使用UISearchBar,但它不能完全满足我的需要 激活范围按钮时,它们将覆盖表的第一行。查看所有搜索结果的唯一方法似乎是在编辑完成时隐藏范围按钮;在我的谷歌搜索中,我看到了这一点 我想要Mail拥有的功能,只要搜索框中有文本,范围按钮就会保持不变,并且您可以在更改活动范围按钮时看到搜索结果的变化。但是,如果没有范围按钮覆盖表的第一行,我想不出任何方法来实现这一点。您不能只向下滚动表格视图;搜索栏位于表视图的标题中,因此整个内容都会滚动到一起 感谢您的建议 在尝试以下Andrew的建议后更新 我忘记的一件事是,在ViewDidDisplay中,我向上滚动表视图内容,这样搜索框就不在屏幕顶部,但在需要时可以向下滚动。这显然是我问题的一部分。所以,在我看来Iphone UISearchBar';s范围按钮覆盖第一行结果,iphone,ios,uitableview,uisearchbar,Iphone,Ios,Uitableview,Uisearchbar,我第一次使用UISearchBar,但它不能完全满足我的需要 激活范围按钮时,它们将覆盖表的第一行。查看所有搜索结果的唯一方法似乎是在编辑完成时隐藏范围按钮;在我的谷歌搜索中,我看到了这一点 我想要Mail拥有的功能,只要搜索框中有文本,范围按钮就会保持不变,并且您可以在更改活动范围按钮时看到搜索结果的变化。但是,如果没有范围按钮覆盖表的第一行,我想不出任何方法来实现这一点。您不能只向下滚动表格视图;搜索栏位于表视图的标题中,因此整个内容都会滚动到一起 感谢您的建议 在尝试以下Andrew的建议
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像素的间隙,由范围按钮填充
最后一次更新-我通过移除线条周围的动画块来移动搜索栏,使它看起来更好。我想这在动画开始前就引起了停顿。现在已经足够好了,至少目前是这样。我仍然接受Andrew的回答,因为他把我引向了正确的方向。在Mail.app的例子中,看起来他们用类似以下的东西隐藏了UINavigationBar:
[self.navigationController setNavigationBarHidden:YES animated:YES];
然后使用UIView动画,它们增加搜索栏的大小,以占据导航栏填充的空间
伪代码:
[UIView beginAnimations:@"foo" context:NULL];
[UIView setAnimationDuration:1.0f];
CGRect newFrame = CGRectMake(0,0,self.view.frame.size.width, mySearchBar.frame.size.height);
mySearchBar.frame = newFrame;
//optionally, you could do something like this instead of setting a new frame
// mySearchBar.frame = CGRectOffset(mySearchBar.frame, 0, -44);
[UIView commitAnimations];
这都属于UISearchBarDelegate方法
- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar
然后当用户取消搜索时
– searchBarCancelButtonClicked:
您可以反转动画,然后再次显示导航栏。在Mail.app的情况下,看起来他们用类似以下内容隐藏UINavigationBar:
[self.navigationController setNavigationBarHidden:YES animated:YES];
然后使用UIView动画,它们增加搜索栏的大小,以占据导航栏填充的空间
伪代码:
[UIView beginAnimations:@"foo" context:NULL];
[UIView setAnimationDuration:1.0f];
CGRect newFrame = CGRectMake(0,0,self.view.frame.size.width, mySearchBar.frame.size.height);
mySearchBar.frame = newFrame;
//optionally, you could do something like this instead of setting a new frame
// mySearchBar.frame = CGRectOffset(mySearchBar.frame, 0, -44);
[UIView commitAnimations];
这都属于UISearchBarDelegate方法
- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar
然后当用户取消搜索时
– searchBarCancelButtonClicked:
您将反转动画,然后再次显示导航栏。您使用的是UISearchDisplayController,对吗?如果没有,你应该。它会处理很多你自己要做的工作,比如隐藏导航栏 您正在使用UISearchDisplayController,对吗?如果没有,你应该。它会处理很多你自己要做的工作,比如隐藏导航栏 我也有同样的问题。因为我没有使用UISearchDisplayController(我想避免使用默认的搜索表视图)。所以我宁愿直接去搜索栏。现在的问题是搜索栏嵌入在一个表视图下(您可以在故事板中检查它)。要解决此问题,您必须在UIView下分别嵌入tableview和搜索栏。我也遇到过同样的问题。因为我没有使用UISearchDisplayController(我想避免使用默认的搜索表视图)。所以我宁愿直接去搜索栏。现在的问题是搜索栏嵌入在一个表视图下(您可以在故事板中检查它)。要解决此问题,必须嵌入tableview和搜索栏