2017-11-20 40 views
5

Chúng tôi đang tạo một ứng dụng yêu cầu các tiêu đề khác nhau cho các chế độ xem khác nhau được kết nối thông qua Trình điều khiển Điều hướng và Tab. Chế độ xem ban đầu có hình ảnh làm tiêu đề. Chế độ xem thứ hai có văn bản làm tiêu đề và phần thứ ba cũng có văn bản làm tiêu đề.Tại sao nội dung trên thanh điều hướng hiển thị trên iOS 11 chứ không phải iOS 10?

Chúng tôi đang sử dụng bảng phân cảnh để xây dựng ứng dụng này, đây là cấu trúc phân cấp của bộ điều khiển.

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

Đây là mã chúng tôi sử dụng để hiển thị một hình ảnh trên bộ điều khiển xem đầu tiên:

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 
    } 

Đây là mã chúng tôi sử dụng để hiển thị văn bản như tiêu đề cho hai bộ điều khiển xem khác.

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) 
    } 

Các tiêu đề chức năng là một phần mở rộng được xây dựng để trở về một nhãn:

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 
    } 

Bây giờ vấn đề là, khi chúng tôi thử nghiệm ứng dụng của chúng tôi trên iOS 11, Controllers Navigation hoạt động đúng và tất cả xuất hiện tốt. Khi chúng tôi thử nghiệm ứng dụng của mình trên iOS 10, hình ảnh và văn bản từ bộ điều khiển điều hướng biến mất một cách kỳ diệu. Bất kỳ ý tưởng tại sao điều này đang xảy ra?

Dưới đây là hình ảnh của whats up: Picture of the issue. On the left, no title shows up (IOS 10) and on the right a title does show up (IOS 11)

Tôi đang chạy phiên bản mới nhất của Xcode với Swift 4. Cảm ơn trước sự giúp đỡ nào.

+0

thử với khung tập các nhãn trong tiêu đề() phương pháp – iPatel

+0

@iPatel Tôi không nghĩ rằng nó là một vấn đề với phương pháp tiêu đề() bởi vì tôi cũng có một bộ điều khiển xem mà tiêu đề là một imageview và điều đó sẽ không xuất hiện ... – itsfaraaz

Trả lời

2

Bạn cần đặt khung nhãn. titleView là phân lớp của UIView. Vì vậy, nó không có contentSize nội tại. Tuy nhiên, iOS 11 cung cấp kích thước nội dung nội tại cho titleView. Vì vậy, bạn không cần phải thiết lập khung của nó. Kiểm tra câu trả lời này.

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

Hãy thử các bước sau:

  1. Đổi dạng hiển thị hệ thống phân cấp điều khiển để TabbarViewController> NavigationController> ViewController1, ViewController2

enter image description here

  1. Thêm khung để gắn nhãn. Thanh điều hướng trong iOS 11 có thể định cấu hình khung của nhãn bằng nội tạiContentSize, nhưng trước đó iOS không thể.

  2. Đặt tiêu đềXem theo self.navigationItem.titleView = titleView. Không sử dụng self.parent?.navigationItem.titleView = titleView.

  3. self.navigationController?.navigationBar.isHidden = false là đủ và không cần thiết phải gọi self.parent?.navigationController?.navigationBar.isHidden = false.

Các vấn đề liên quan