2017-09-15 34 views
21

Załączam kontroler UISearch do właściwości navigationItem.searchController kontrolera UITableViewController na iOS 11. Działa to dobrze: mogę korzystać z ładnego paska wyszukiwania w stylu iOS 11.Pokaż pasek wyszukiwania w pasku nawigacji bez przewijania w systemie iOS 11

Chciałbym jednak, aby pasek wyszukiwania był widoczny po uruchomieniu. Domyślnie użytkownik musi przewinąć w górę w widoku tabeli, aby zobaczyć pasek wyszukiwania. Czy ktoś wie, jak to jest możliwe?

enter image description here enter image description here

lewej: domyślna sytuacja po starcie. Po prawej: pasek wyszukiwania jest widoczny (przewijając w górę). Chciałbym, aby pasek wyszukiwania był widoczny po uruchomieniu, tak jak na prawym obrazku.

Już znalazłem, że pasek wyszukiwania może być widoczny, ustawiając właściwość hidesSearchBarWhenScrolling mojego elementu nawigacji na false. Powoduje to jednak, że pasek wyszukiwania jest zawsze widoczny - nawet podczas przewijania w dół - co jest teraz tym, czego chcę.

+0

gdzie dodano kod 'hidesSearchBarWhenScrolling' –

+1

, co z ustawieniem go jako s' firstResponder'? –

Odpowiedz

52

Poniższa sprawia, że ​​pasek przewijania widoczny na początku, potem pozwala się ukryć podczas przewijania:

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 
    if #available(iOS 11.0, *) { 
     navigationItem.hidesSearchBarWhenScrolling = false 
    } 
} 

override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(animated) 
    if #available(iOS 11.0, *) { 
     navigationItem.hidesSearchBarWhenScrolling = true 
    } 
} 

Korzystanie isActive nie zrobił” t zrobić to, co chciałem, powoduje, że pasek przewijania jest aktywny (pokazuje przycisk anulowania, itp.), kiedy wszystko, czego chcę, to aby był widoczny.

+0

Dzięki, pracował dla mnie. Ciekawe rozwiązanie jednak :) – Mikrasya

+0

Perfect! Dzięki! –

+1

To rozwiązanie działa, ale są efekty uboczne, jeśli wyświetlasz pasek nawigacyjny, jeśli był wcześniej ukryty (np. Naciśnięcie tego widoku w pasku wyszukiwania na stosie nawigacji) Pasek wyszukiwania pojawi się jako nieruchomy w miejscu nawigacji pasek animuje. Wygląda okropnie :( –

-1

Możesz ustawić właściwość isActive na wartość true po dodaniu searchController do navigationItem.

Właśnie tak:

override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(animated) 
    searchController.isActive = true 
} 

:)

+0

Brak metody ustawiającej 'setIsActive:' –