UITearchBar在iOS 7/8上的UITableViewHeader奇怪动画中

时间:2013-12-13 11:59:35

标签: ios uitableview uisearchbar

我们有一个班级SearchTableViewController,其UISearchBar作为tableViewHeader的{​​{1}}。 我们还使用UITableView,其委托(UISearchDisplayControllersearchResultsDelegate)是保存包含searchBar的tableView的控制器。

搜索本身效果很好,但进入/退出搜索模式时的动画真的很奇怪:

Weird animation 1

在另一个视图控制器(searchResultsDataSource的子类)中,问题更加明显:

Weird animation 2

我尝试过实现各种SearchTableViewController方法(例如UISearchDisplayDelegate),但是要么太晚(动画已经完成)或者仅在给出{{1}时调用它们} textfield焦点。 我有什么方法可以让我在之前改变动画吗? 另外,请注意导航栏在第一个视频中如何立即消失。我已经尝试在多个位置手动将其设置为“未隐藏”,这没有任何改变。

我们的-(void)searchDisplayControllerWillBeginSearch:配置为半透明,如果这有任何区别。 在iOS 6上,一切都按预期工作,searchBar顺利地向上推动了navigationBar。

如果需要,会发布代码,但我们不会以任何方式修改标准行为(设置框架,覆盖委托方法等)。

任何想法可能是奇怪动画的原因?

2 个答案:

答案 0 :(得分:29)

我在iOS 7技术讲座上与一位苹果工程师交谈过,他也无法帮助我。经过进一步调查,我发现第一个问题是iOS 7(.0.4)的默认行为。

更新:该错误仍然存​​在于7.1中。

第二次更新:该错误仍然存​​在于8.1中。

第三次更新:该错误仍然存​​在于8.4中。

第四次更新:该错误仍然存​​在于9.2

重现的步骤:

  1. 在Xcode 5 / iOS 7 SDK中创建一个新的通用Master-Detail示例应用程序。
  2. 为MasterViewController的TableView添加UISearchBar(iOS 8的编辑:,使用“搜索栏和搜索显示控制器”)(无论是在InterfaceBuilder还是代码中)
  3. 运行项目,启用慢动画并单击搜索栏。
  4. 启动/取消搜索时的动画在iPad上很奇怪,但在iPhone上看起来很好:Template project run on the iPad。 我提交了一个关于它的bug报告,如果这个问题得到修复,它会更新。
  5. 关于第二个奇怪的动画: 问题是第一个视图控制器是从一个笔尖创建的,而第二个是以编程方式创建的。因此,缺少以下呼叫:

    [self setAutomaticallyAdjustsScrollViewInsets:YES];
    [self setExtendedLayoutIncludesOpaqueBars:YES];
    

    viewDidLoad:中包含这两行之后,动画看起来很“正常” - 就像样本项目中的动画一样。

答案 1 :(得分:1)

我的回答here帮助我了解奇怪的动画行为的具体情况:

我找到了

self.navigationController.navigationBar.translucent = YES;

让我的动画减少错误