我们有一个班级SearchTableViewController
,其UISearchBar
作为tableViewHeader
的{{1}}。
我们还使用UITableView
,其委托(UISearchDisplayController
和searchResultsDelegate
)是保存包含searchBar的tableView的控制器。
搜索本身效果很好,但进入/退出搜索模式时的动画真的很奇怪:
在另一个视图控制器(searchResultsDataSource
的子类)中,问题更加明显:
我尝试过实现各种SearchTableViewController
方法(例如UISearchDisplayDelegate
),但是要么太晚(动画已经完成)或者仅在给出{{1}时调用它们} textfield焦点。
我有什么方法可以让我在之前改变动画吗?
另外,请注意导航栏在第一个视频中如何立即消失。我已经尝试在多个位置手动将其设置为“未隐藏”,这没有任何改变。
我们的-(void)searchDisplayControllerWillBeginSearch:
配置为不半透明,如果这有任何区别。
在iOS 6上,一切都按预期工作,searchBar顺利地向上推动了navigationBar。
如果需要,会发布代码,但我们不会以任何方式修改标准行为(设置框架,覆盖委托方法等)。
任何想法可能是奇怪动画的原因?
答案 0 :(得分:29)
我在iOS 7技术讲座上与一位苹果工程师交谈过,他也无法帮助我。经过进一步调查,我发现第一个问题是iOS 7(.0.4)的默认行为。
更新:该错误仍然存在于7.1中。
第二次更新:该错误仍然存在于8.1中。
第三次更新:该错误仍然存在于8.4中。
第四次更新:该错误仍然存在于9.2
中重现的步骤:
关于第二个奇怪的动画: 问题是第一个视图控制器是从一个笔尖创建的,而第二个是以编程方式创建的。因此,缺少以下呼叫:
[self setAutomaticallyAdjustsScrollViewInsets:YES];
[self setExtendedLayoutIncludesOpaqueBars:YES];
在viewDidLoad:
中包含这两行之后,动画看起来很“正常” - 就像样本项目中的动画一样。
答案 1 :(得分:1)
我的回答here帮助我了解奇怪的动画行为的具体情况:
我找到了
self.navigationController.navigationBar.translucent = YES;
让我的动画减少错误