2017-11-20 26 views
5

हम एक ऐसा एप्लिकेशन बना रहे हैं जिसके लिए विभिन्न नेविगेशन और टैब व्यू कंट्रोलर के माध्यम से जुड़े विभिन्न विचारों के लिए विभिन्न शीर्षलेखों की आवश्यकता होती है। प्रारंभिक दृश्य में शीर्षक के रूप में एक छवि है। दूसरे दृश्य में शीर्षक के रूप में टेक्स्ट है और तीसरे शीर्षक में शीर्षक भी है।आईओएस 11 पर नेविगेशन बार सामग्री क्यों दिख रही है लेकिन आईओएस 10 नहीं है?

हम इस एप्लिकेशन को बनाने के लिए स्टोरीबोर्ड का उपयोग कर रहे हैं, यहां नियंत्रकों का पदानुक्रम है।

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 
    } 

यहाँ कोड हम अन्य दो दृश्य नियंत्रकों के लिए शीर्षक के रूप में पाठ प्रदर्शित करने के लिए उपयोग है:

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

यहाँ कोड हम पहली बार देखने नियंत्रक पर एक छवि प्रदर्शित करने के लिए इस्तेमाल करते हैं।

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 
    } 

अब इस मुद्दे को, जब हम आईओएस 11 पर हमारे आवेदन का परीक्षण, नेविगेशन नियंत्रक ठीक से काम कर रहा है और सभी प्रकट होता है:

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

शीर्षक समारोह एक लेबल वापस जाने के लिए बनाया गया एक विस्तार है कुंआ। जब हम आईओएस 10 पर हमारे आवेदन का परीक्षण करते हैं, तो नेविगेशन नियंत्रकों की छवि और पाठ जादुई रूप से गायब हो जाता है। कुछ पता है कि ऐसा क्यों हो रहा है? Picture of the issue. On the left, no title shows up (IOS 10) and on the right a title does show up (IOS 11)

मैं Xcode के नवीनतम संस्करण को स्विफ्ट के साथ पहले से कोई मदद के लिए चला रहा हूँ 4. धन्यवाद:

यहाँ क्या अप की एक छवि है।

+0

() शीर्षक में लेबल के सेट फ्रेम विधि – iPatel

+0

@iPatel साथ की कोशिश मैं नहीं इसकी विधि शीर्षक() के साथ कोई समस्या लगता है क्योंकि मैं भी एक दृश्य नियंत्रक जो शीर्षक एक है imageview और वह या तो प्रकट नहीं होगा ... – itsfaraaz

उत्तर

2

आपको लेबल के फ्रेम को सेट करने की आवश्यकता है। titleView UIView का उप-वर्ग है। तो इसमें आंतरिक सामग्री आकार नहीं है। हालांकि, आईओएस 11 titleView के लिए आंतरिक सामग्री आकार प्रदान करता है। तो आपको इसकी फ्रेम सेट करने की आवश्यकता नहीं है। इस उत्तर की जांच करें।

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

निम्न चरण आज़माएं:

  1. दृश्य बदलें नियंत्रक पदानुक्रम TabbarViewController> navigationController> ViewController1, ViewController2

enter image description here

  1. फ़्रेम जोड़ें लेबल करना। आईओएस 11 में नेविगेशन बार लेबल के फ्रेम को इसके आंतरिक सामग्री द्वारा कॉन्फ़िगर कर सकता है, लेकिन पहले आईओएस नहीं कर सका।

  2. शीर्षक सेट करें self.navigationItem.titleView = titleView द्वारा देखें। self.parent?.navigationItem.titleView = titleView का उपयोग न करें।

  3. self.navigationController?.navigationBar.isHidden = false पर्याप्त है, और self.parent?.navigationController?.navigationBar.isHidden = false पर कॉल करना आवश्यक नहीं है।

संबंधित मुद्दे