2014年3月25日更新
看起来缺少动画是iOS 7.0中的一个错误,并且已在iOS 7.1中修复。
原始问题
通常情况下,当您点击iOS 7中的搜索栏内部时,它会有一个漂亮的小动画,其中放大镜和“搜索”文本从搜索栏的中间滑动到左侧。但是,如果我将搜索栏放在导航栏中而不是在表格视图中,则它不再是动画。相反,放大镜和“搜索”文本会立即跳到搜索栏的左侧。
您可以使用Apple的UISearchBar sample project轻松看到这一点。打开故事板。在Search Display Controller上添加一个布尔运行时属性displaysSearchBarInNavigationBar
,并选中它创建的复选框。然后,将搜索栏向上移动到树中的一个级别,使其位于表视图之外。运行项目,搜索栏现在应该在导航栏中。请注意,当您点按搜索栏时,它不会设置动画。
有没有人成功将UISearchBar放入iOS 7的导航栏中,并让它正常运行?
要清楚,我的问题是当用户点击搜索栏时,下面的第一个和第二个屏幕截图之间没有搜索栏的动画。
答案 0 :(得分:5)
在iOS 7中,UISearchDisplayController默认支持此功能。设置UISearchDisplayController的displaysSearchBarInNavigationBar = YES
以使其轻松工作。
Apple Inc Doc: 从iOS 7.0开始,您可以使用带有的搜索显示控制器 导航栏(UINavigationBar类的一个实例)by 配置搜索显示控制器 displaysSearchBarInNavigationBar和navigationItem属性。
您的预期答案
从表格视图中删除搜索栏。使用displaysSearchBarInNavigationBar意味着UISearchDisplayController将负责将搜索栏放在层次结构中。
- (void)viewDidLoad
{
self.searchDisplayController.displaysSearchBarInNavigationBar=YES;
}
这不是动画第一次点击,但动画在取消时刻效果很好:
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
[searchBar setShowsCancelButton:YES animated:YES];
}
-(void)searchBarTextDidEndEditing:(UISearchBar *)searchBar
{
[searchBar setShowsCancelButton:NO animated:YES];
}