2013-12-13 35 views
20

我們有一個類SearchTableViewController,它包含UISearchBar作爲其UITableViewtableViewHeader。 我們也使用UISearchDisplayController,其代表(searchResultsDelegatesearchResultsDataSource)是保存包含searchBar的tableView的控制器。UITableViewHeader中的UISearchBar iOS上的奇怪動畫7/8

搜索本身工作得很好,但進入/退出搜索模式時的動畫效果是很奇怪:

Weird animation 1

在另一個視圖控制器(在SearchTableViewController的子類),這個問題就更加明顯:

Weird animation 2

我試圖實現各種UISearchDisplayDelegate方法(如-(void)searchDisplayControllerWillBeginSearch:),但它們要麼被調用得太晚(當動畫已經完成時),要麼只是在將焦點放在文本框時。 有沒有什麼方法可以讓我在發生之前改變動畫? 另外,請注意導航欄如何在第一個視頻中立即消失。我曾嘗試在多個位置手動將其設置爲「不隱藏」,但這並未改變任何內容。

我們的navigationBar配置爲而不是是半透明的,如果這有什麼區別的話。 在iOS 6上,一切按預期工作,searchBar順利地向上推導航杆。

如果需要,將發佈代碼,但我們沒有以任何方式修改標準行爲(設置框架,覆蓋委託方法等)。

任何想法可能是奇怪的動畫原因?

回答

29

我在iOS 7 Tech Talks上與蘋果工程師進行了交談,他也無法幫助我。經過進一步調查,我發現第一個問題是iOS 7(.0.4)的默認行爲。

更新:該錯誤仍存在於7.1中。

第二次更新:該錯誤仍存在於8.1中。

第三次更新:該錯誤仍存在8.4。

四更新:該缺陷仍然存在於9.2

重現步驟:

  1. 在Xcode中創建5/iOS的7 SDK一個新的通用主詳細示例應用程序。
  2. 添加一個UISearchBar(編輯:爲iOS 8,請使用「搜索欄和搜索顯示控制器」)的MasterViewController的TableView中
  3. 運行該項目(不InterfaceBuilder下或代碼的問題,如果),啓用慢動畫並點擊搜索欄。
  4. 開始/取消搜索時的動畫在iPad上很奇怪,但在iPhone上看起來不錯:Template project run on the iPad。 我提出了一個關於它的bugreport,如果這個問題得到解決,將會更新。

關於第二個奇怪的動畫: 問題是第一個視圖控制器是從一個筆尖創建的,而第二個視圖控制器是以編程方式創建的。因此,下面的調用失蹤:

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

包括viewDidLoad:這兩條線後,動畫看起來「精」 - 也就是說,同車從樣本項目中的一個。

+0

動畫對於我現在使用'UISearchDisplayController'在表頭視圖中使用'UISearchBar'。但仍然不完美。看起來像UIKit中的錯誤。 – choise

+4

'[self setExtendedLayoutIncludesOpaqueBars:YES];'爲我做了詭計。非常感謝! –

1

我的回答here幫助我的具體情況爲奇怪的動畫行爲:YES`看起來好了很多:

我發現

self.navigationController.navigationBar.translucent = YES; 

使我的動畫bug更少使用`setExtendedLayoutIncludesOpaqueBars