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

Dav*_*ter 20 uitableview uisearchbar ios

我们有一类SearchTableViewController是持有UISearchBar作为tableViewHeaderUITableView.我们还使用UISearchDisplayController其委托(searchResultsDelegatesearchResultsDataSource)是保存包含searchBar的tableView的同一个控制器.

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

奇怪的动画1

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

奇怪的动画2

我已经尝试过实现各种UISearchDisplayDelegate方法(例如-(void)searchDisplayControllerWillBeginSearch:),但它们要么被调用得太晚(当动画已经完成时),要么只是在给予UISearchBar文本字段焦点时.我有什么方法可以让我在动画发生之前更改动画吗?另外,请注意导航栏在第一个视频中如何立即消失.我已经尝试在多个位置手动将其设置为"不隐藏",这并没有改变任何东西.

我们navigationBar的配置不是半透明的,如果这有任何区别.在iOS 6上,一切都按预期工作,searchBar平滑地向上推动navigationBar.

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

什么想法可能是奇怪的动画的原因?

Dav*_*ter 29

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

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

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

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

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

重现步骤:

  1. 在Xcode 5/iOS 7 SDK中创建一个新的通用Master-Detail示例应用程序.
  2. 添加UISearchBar(编辑: iOS 8,使用"搜索栏和搜索显示控制器")到MasterViewController的TableView(无论是在InterfaceBuilder还是在代码中)
  3. 运行项目,启用慢动画并单击搜索栏.
  4. 开始/取消搜索时的动画在iPad上很奇怪,但在iPhone上看起来很好:模板项目在iPad上运行.我提交了一个关于它的bug报告,如果这个问题得到解决将更新.

关于第二个奇怪的动画:问题是第一个视图控制器是从一个笔尖创建的,而第二个是以编程方式创建的.因此,缺少以下呼叫:

[self setAutomaticallyAdjustsScrollViewInsets:YES];
[self setExtendedLayoutIncludesOpaqueBars:YES];
Run Code Online (Sandbox Code Playgroud)

在包含这两行之后viewDidLoad:,动画看起来很"精细" - 就像样本项目中的那个一样.

  • `[self setExtendedLayoutIncludesOpaqueBars:YES];`为我做了诀窍.非常感谢! (4认同)