2017-09-01 18 views
22

Xcode 9 beta 6 iOS 11iOS 11 problemy z navigationBar prefersLargeTitles

Mam storyboard dla viewController Z tła ImageView, Tableview i widok searchFooter są subviews z widoku .the struktura przedstawia się następująco:

enter image description here

w AppDelegate klasa, ustawić
UINavigationBar.appearance().prefersLargeTitles = true

i

UINavigationBar.appearance().setBackgroundImage(UIImage(),for: .default) 

UINavigationBar.appearance().shadowImage = UIImage() 

W klasie viewController, ustawić navigationItem.searchController = searchController i navigationItem.hidesSearchBarWhenScrolling = true

Kiedy uruchomić aplikację, okazało się, że shadowImage z navigationBar wciąż istnieje. Pasek nawigacji nie stałby się normalnym trybem automatycznym (lewy gif) podczas przewijania tabeli. Mam nadzieję, że pasek nawigacyjny działa tak samo, jak aplikacja systemu (prawy gif).

my appsystem app

dziwne zachowanie: Kiedy usunąć tło imageView, może pracować także jako aplikacja systemu na symulatorze.

Nie wiem, dlaczego to się stało, zastanawiam się, jak go rozwiązać? Dzięki.

+0

To wygląda jak błąd iOS/UIKit, spróbuj zgłosić to firmie Apple. – Shadowfacts

+0

Po prostu stwierdziłem, że widok tabeli musi być pierwszym podzbiorem w hierarchii widoku. Nadal próbuj sprawdzić, czy istnieje sposób obejścia. – Vincent

Odpowiedz

-1

Należy dodać poniżej linii w viewDidLoad()

self.navigationController?.navigationBar.prefersLargeTitles = true 
navigationItem.hidesSearchBarWhenScrolling = false 

lub można wdrożyć viewForHeaderInSection metodę UITableViewDataSource

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? 
    { 
      let search = UISearchController(searchResultsController: nil) 
      search.searchResultsUpdater = self 
      return search.searchBar 
    } 

Link to see the screenshot 1Link to see the screenshot 2

0

konto zostało usunięte przez Stack overflow zespołu. Używam mojego innego identyfikatora do komentowania tutaj. Poinformowałem o problemie Apple, poprosili mnie o dostarczenie projektu i zrobiłem, ale nie więcej dalszych komentarzy od Apple.

2

Zrobiłem małą aplikację dla twojego problemu. Możesz dotrzeć do projektu na Github.

Transparent NavigationBar for iOS11

Uwaga: Musisz użyć koloru dla UINavigationBar podczas przewijania w górę.

+0

Jestem oryginalnym autorem tego pytania, to mój nowy ID. Pobrałem projekt, który podałeś, to naprawdę może naprawić problem.Ale jedno pytanie, dlaczego trzeba użyć koloru do UINavigationBar podczas przewijania w górę? Wszelkie Apple docs wspomnieć o tym ?Dzięki. – Ringo

+0

Spojrzałem na kod w twoim projekcie, ustawiłeś 'tableView.backgroudView = UIImageView (image: UIImage (named:" main_background ")). Właściwie sytuacja nie jest taka sama. Użyłem UIImageView pod tableView zamiast ustawiania 'backgroudView'. Możesz pobrać mój projekt za pomocą [link] (https://pan.baidu.com/s/1kWFhnEJ) – Ringo

0

Dokonaj ograniczenia TableView Top bezpośrednio pod nawigacją NavigationController, a nie na górze ViewControllers.Powinno działać

Powiązane problemy