2014-10-06 15 views
30

üzerinden animasyon, bu searchController ait UISearchBar benim kök ViewController görüntülenen benim şimdiki tableView arasında tableHeaderView olması ayarlanır. Neredeyse her şey beklendiği gibi iyi çalışıyor. Ama UISearchBar'un canlandırmasında (searchBar'a tıkladığımda ve UINavigationBar gizler ve searchBar, UISearchDisplayController'da olduğu gibi en üste gider) garip bir davranışım var. UINavigationBar (y: 0) konumuna hareket etmek yerine, ekrandan dışarı atlar ve iptal düğmesini gösteren animasyonu başlatır. Örnek kodumu init yerine viewDidLoad'a taşımayı denedim ve işler sadece aynı. Sorunun merkezinin searchResultsController'un görünümü çerçevesinde olduğunu düşünüyorum, ancak bunun hakkında emin değilim (çerçeveyi başarılı bir şekilde ayarlamayı denedim). Yaptığım her şey saf kodda. İşte tableHeaderView içinde UISearchController Searchbar Ben <code>searchResultsController</code> olarak <code>UITableViewController</code> ile <code>UISearchController</code> sahip ekranın

kod ilgili parçasıdır:

self.searchController = [[UISearchController alloc] initWithSearchResultsController:self.searchResultsController]; 
    self.searchController.delegate = self; 
    self.searchController.searchResultsUpdater = self; 
    self.searchController.searchBar.delegate = self; 

    [self.searchController.searchBar sizeToFit]; 
    self.tableView.tableHeaderView = self.searchController.searchBar; 

    self.searchController.definesPresentationContext = YES; 

Ve searchResultsController için tembel yük vardır:

- (UITableViewController *)searchResultsController { 
if (_searchResultsController == nil) { 
    _searchResultsController = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain]; 
    _searchResultsController.tableView.delegate = self; 
    _searchResultsController.tableView.dataSource = self; 

return _searchResultsController; 

}

Ben örnek kod indirdiğiniz Apple, ancak onlar storyBoards ve UITableViewCell için bir xib kullanıyorlar, SearchController projede mükemmel çalışıyor. Aynı problemi olan var mı? Bunu nasıl düzeltebilirim? Herhangi bir çözüm veya öneri takdir edilecektir.

Dikkatiniz için teşekkür ederiz.

+0

Hiç bu sorunu anlamaya mı? Şu anda arama çubuğumda benzer bir sorun yaşıyorum. – Lorenzo

+0

Hayır, Lorenzo. Maalesef bu sorun için onaylanmamış API'yi kullandım. Hikaye tahtaları ile iyi bir şekilde çalışıyor gibi görünüyor (Apple'dan örnek uygulamayı denedim), ancak kodda bu garip hata var. –

+0

Tamam, teşekkürler. Kullandığın yöntemi açıklayabilir misin? Apple'ın örneğini de inceledim ve tablo ve ayrıntı görünümü için storyboard kullanıyorlar, ancak tüm arama çubuğu bileşenleri kod içinde yapıldı, yaptığınız buydu mu? – Lorenzo

cevap

19

HidesNavigationBarDuringPresentation öğesini false olarak ayarlamayı denediniz mi? gezinme çubuğunda searchbar koymak benim baş ağrısı çözüldü ..

self.searchController.hidesNavigationBarDuringPresentation = false; 

(iphone için) Bence daha sağlam bir kullanıcı deneyimi Lorenzo'nun cevabı benim için çalıştı @

self.navigationItem.titleView = self.searchController.searchBar; 
+0

I Bunu zaten denedim ama işe yaramadı. Yine de teşekkürler! –

+0

bu benim için düzeltildi, ama ne aptalca bir hata – malhal

+0

İnanılmaz bu tam olarak aradığım şey, çok teşekkürler. Gerçekten de arama çubuğu gezinme çubuğunda olmalıdır. –

13

bu net hale getirmek için verir .

self.definesPresentationContext = YES; 
+0

için arama çubuğunu ekledim. Bu benim için çalışmıyor. –

+0

İnsanım benim günüm kahramansın! –

+2

Bunun tersi benim için çalıştı! Arama çubuğu için nav çubuğu ve sonuçlar için bir tablo görünümü arasında bir kapsayıcı olarak 'UIView' vardı. Arama çubuğu etkinleştirildiğinde kapsayıcının yaklaşık 44 piksel aşağıya inmesini engellemek için 'self.definesPresentationContext 'öğesini' false' olarak ayarladım. – Echelon

22

viewDidLoad yöntemine

self.extendedLayoutIncludesOpaqueBars = YES; 

ekle

+0

Benim için çalıştı. Günümü kurtardın! Teşekkürler. – Sai

+0

UISearchController ile birlikte UITableViewController ile birlikte çalışmak, bu sorunu benim için çözdü. – Senry

5

bu deneyin:

Önce

UISearchControllerDelegate

temsilci gerekir

Swift

func willPresentSearchController(searchController: UISearchController) { 
    self.navigationController?.navigationBar.translucent = true 
} 

func willDismissSearchController(searchController: UISearchController) { 
    self.navigationController?.navigationBar.translucent = false 
} 
+1

Bunun ne kadar iyi çalıştığına şaşırdım. – Can

0

ben UISearchController görüşlerimi biri dışında diğer değil de mükemmel çalışıyor fark ettim. Sorun, UITableViewController ve UIViewController ile değildi. İçinde bir UITableView olan bir UIViewController'a geçiş yaparsanız ve düzgün bir şekilde sınırlandırılırsanız, sorun yoktur.Ben bir XIB ile benim uyguladı ve mükemmel çalıştı. Swift ise 3,01

func willPresentSearchController(searchController: UISearchController){ 
self.navigationController?.navigationBar.isTranslucent = true 
} 

func willDismissSearchController(searchController: UISearchController) { 
self.navigationController?.navigationBar.isTranslucent = false 
} 
1

, deneyin:

override func viewDidLoad() { 
    edgesForExtendedLayout = [] 
    searchController.hidesNavigationBarDuringPresentation = false 

    // ... 
} 
İlgili konular