2017-11-20 128 views
5

Tworzymy aplikację, która wymaga różnych nagłówków dla różnych widoków połączonych za pomocą kontrolera nawigacyjnego i kontrolera widoku kart. Początkowy widok ma obraz jako tytuł. Drugi widok zawiera tekst jako tytuł, a trzeci również tekst jako tytuł.Dlaczego zawartość paska nawigacji jest wyświetlana w systemie iOS 11, ale nie w systemie IOS 10?

Używamy scenorysów do budowy tej aplikacji, tutaj jest hierarchia kontrolerów.

Navigation Controller --> Tab Bar Controller --> View Controller 1, View Controller 2, View Controller 3 

Oto kod używamy do wyświetlania obrazu na pierwszym kontrolerze widoku:

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 

    let titleView = UIImageView() 
    titleView.contentMode = .scaleAspectFit 
    titleView.image = UIImage(named: "logo_white_thin") 

    self.parent?.navigationItem.titleView = titleView 
    self.parent?.navigationController?.navigationBar.isHidden = false 
    self.navigationController?.navigationBar.isHidden = false 
    } 

Oto kod używamy do wyświetlania tekstu jako tytułu dla pozostałych dwóch kontrolerów widoku.

override func viewWillAppear(_ animated: Bool) { 
    guard let uid = Auth.auth().currentUser?.uid else {return} 
    guard let username = users[uid]?.username else {return} 

    self.parent?.navigationItem.titleView = title(text: username) 
    self.parent?.navigationController?.navigationBar.isHidden = false 
    self.navigationController?.navigationBar.isHidden = false 

    print("Setting navigation bar title to ", username) 
    } 

tytuł funkcja jest rozszerzeniem zbudowany, aby powrócić etykietę:

func title(text: String) -> UILabel { 
    let label = UILabel() 
    label.text = text 
    label.textColor = UIColor.white 
    label.font = UIFont.boldSystemFont(ofSize: label.font.pointSize) 
    return label 
    } 

Teraz problem jest, gdy badamy naszą aplikację na iOS 11, kontrolery nawigacyjne działają poprawnie i wszystkie pojawi dobrze. Kiedy testujemy naszą aplikację na iOS 10, obraz i tekst z kontrolerów nawigacji magicznie znikają. Jakiś pomysł dlaczego tak się dzieje?

Oto obraz Siema: Picture of the issue. On the left, no title shows up (IOS 10) and on the right a title does show up (IOS 11)

Używam najnowszej wersji Xcode z Swift 4. Z góry dziękuję za wszelką pomoc.

+0

spróbować z ramki zestaw etykiet w tytule() metoda – iPatel

+0

@iPatel Nie sądzę Jego problem z metodą tytuł() bo ja też mam kontroler widoku, który tytuł jest imageview i to się nie pojawi ... – itsfaraaz

Odpowiedz

2

Musisz ustawić ramkę etykiety. titleView jest podklasą UIView. Więc nie ma wewnętrznej zawartości. Jednak iOS 11 zapewnia wewnętrzny rozmiar treści dla titleView. Nie musisz więc ustawiać jego ramki. Sprawdź tę odpowiedź.

iOS 11 navigationItem.titleView Width Not Set

func title(text: String) -> UILabel { 
     let label = UILabel() 
     // add frame 
     label.frame = CGRect(x: 0, y: 0, width: 32, height: 32) 
     label.text = text 
     label.textColor = UIColor.black 
     label.font = UIFont.boldSystemFont(ofSize: label.font.pointSize) 
     return label 
    } 
0

spróbuj wykonać następujące kroki: kontroler

  1. Zmień widok hierarchia do TabbarViewController> NavigationController> ViewController1, ViewController2

enter image description here

  1. Dodaj ramę oznaczać. Pasek nawigacyjny w systemie iOS 11 może skonfigurować ramkę etykiety według jej wewnętrznej wartości ContentSize, ale wcześniejszy iOS nie mógł tego zrobić.

  2. Ustaw tytułViewView by self.navigationItem.titleView = titleView. Nie używaj self.parent?.navigationItem.titleView = titleView.

  3. self.navigationController?.navigationBar.isHidden = false wystarczy i nie trzeba dzwonić pod numer self.parent?.navigationController?.navigationBar.isHidden = false.