2013-12-16 13 views
15

मुझे आईओएस 7 में कोई समस्या है जहां एक सामान्य यूआईएनएविगेशन नियंत्रक धक्का नियंत्रक को UINavigationController navbar रंग (जो एक प्रकाश है) के लिए सही स्थिति बार टेक्स्ट रंग है भूरा, लगभग सफेद तो स्टेटस बार टेक्स्ट काला है)। हालांकि, जब -presentViewController:animated:completion: का उपयोग करके "मोडल" व्यू कंट्रोलर प्रस्तुत किया जाता है, तो स्टेटस बार टेक्स्ट रंग सफेद में बदल जाता है और नेविबार के रंग को देखते हुए बहुत मुश्किल होती है। Navbar रंग हमेशा पूरे ऐप में समान होता है और प्रत्येक दृश्य नियंत्रक के लिए नहीं बदलता है। यह हर -presentViewController कॉल पर होता है।आईओएस 7: मोडल व्यू कंट्रोलर स्टेटस बार गलत रंग है लेकिन सामान्य दृश्य नियंत्रक सही हैं

"नियंत्रक-आधारित स्थिति बार उपस्थिति देखें" YES पर सेट है।

मुझे यकीन नहीं है कि इसे आजमाने और हल करने के लिए क्या देखना है।

+0

निश्चित रूप से हल करने के लिए असली मुद्दा मोडल पॉपअप पर बदलते पृष्ठभूमि रंग है? स्टेटस बार टेक्स्ट रंग बदलना रूट समस्या को संबोधित नहीं करता है – HughHughTeotl

+0

यह कुछ समाधानों पर चर्चा करता है, लेकिन वे थोड़ा सा हैकिश: http://blog.ijasoneverett.com/2013/09/ios-7-bugs-the-status- बार-और-मोडल-व्यू-कंट्रोलर्स/ – HughHughTeotl

उत्तर

1

आप अपने नेविगेशन नियंत्रक वर्ग

- (UIStatusBarStyle)preferredStatusBarStyle 
{ 
    return UIStatusBarStyleLightContent; 
// or UIStatusBarStyleBlackOpaque, UIStatusBarStyleBlackTranslucent, or UIStatusBarStyleDefault 

} 

में preferredStatusBarStyle विधि को फिर से परिभाषित और आप भी एक "दृश्य किया लोड विधि" कस्टम रंग सेट करने के लिए परिभाषित कर सकते हैं आप चाहते हैं

- (void) viewDidLoad 
{ 
    UIColor *barColor = [UIColor whitecolor]; 

    UIView *colorView = [[UIView alloc] initWithFrame:CGRectMake(0.f, -20.f, 320.f, 64.f)]; 
    colorView.opaque = NO; 
    colorView.alpha = .5f; 
    colorView.backgroundColor = barColor; 

    self.navigationBar.barTintColor = barColor; 
    self.navigationBar.tintColor = [UIColor whiteColor]; 
    [self.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor]}]; 

    /*self.navigationController.navigationBar.barTintColor = [UIColor blackColor]; 
    self.navigationController.navigationBar.tintColor = [UIColor whiteColor]; 
    [self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}]; 
    self.navigationController.navigationBar.translucent = NO;*/ 

    [self.navigationBar.layer insertSublayer:colorView.layer atIndex:0]; 

} 
+0

मुझे इसे फिर से प्रयास करना होगा क्योंकि यह कुछ दिन रहा है, लेकिन पसंदीदास्टैटसबार स्टाइल कॉल मॉडल प्रस्तुत दृश्य के लिए परिणाम नहीं बदल रहा था नियंत्रक जब मैंने कोशिश की थी। मैं सुनिश्चित करने के लिए फिर कोशिश करूंगा। धन्यवाद! – chadbag

+0

क्या आपने अपने लिए UIStatusBarStyleDefault को आजमाया था? मुझे लगता है कि यह एक या अन्य UIStatusBarStyleLightContent –

+0

है जैसा कि वर्णित समस्या को ठीक नहीं करता है। जब तक ऐप वीसी नियंत्रित स्टेटस बार उपस्थिति का उपयोग कर रहा है, वांछितStatusBarStyle विधि को कभी-कभी प्रदर्शित स्क्रीन के लिए नहीं बुलाया जाएगा लेकिन अन्यथा महान काम करता है। यह अभी भी आईओएस 7.1 में हो रहा है। – mcsheffrey

2

यह काम करता है सकते हैं। लेकिन मैं इससे खुश नहीं हूं क्योंकि यह थोड़ा हैकी है। मुझे लगता है कि यह एक बग है कि preferredStatusBarStyle को मोडल व्यू के लिए नहीं कहा जाता है। एप्पल से पूछेंगे।

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; 
    [self setNeedsStatusBarAppearanceUpdate]; 
} 


- (void)viewWillDisappear:(BOOL)animated 
{ 
    [super viewWillDisappear:animated]; 

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; 
    [self setNeedsStatusBarAppearanceUpdate]; 
} 
+0

यह मेरे लिए काम नहीं करता है। – Banana

+0

@ आईओएस पर बानााना 7? –

+0

नहीं, आईओएस 8.1 पर। – Banana

12

नेविगेशन नियंत्रक का फैसला करता है एक प्रकाश या अंधेरे सामग्री अपने नेविगेशन पट्टी के barStyle संपत्ति के आधार पर करने के लिए है या नहीं। डिफ़ॉल्ट, UIBarStyleDefault, इसका मतलब है कि नेविगेशन बार में हल्का रंग होता है और स्टेटस बार में अंधेरा सामग्री होगी। इस संपत्ति को UIBarStyleBlack पर बदलना वास्तव में नेविगेशन बार काला नहीं बनाता है (नेविगेशन बार का रंग अभी भी barTintColor का उपयोग करके सेट किया गया है), लेकिन यह बताता है कि इसमें एक गहरा रंग है। नेविगेशन नियंत्रक तब निर्णय लेता है कि, नेविगेशन बार अंधेरा है, इसलिए इसे स्टेटस बार सामग्री को प्रकाश में सेट करना चाहिए।

ऐसा लगता है कि आपके मुख्य नेविगेशन नियंत्रक (जिस पर आप चीजों को धक्का देते हैं) पर barStyle वास्तव में UIBarStyleBlack पर कहीं भी सेट है।

UINavigationController *newViewController = [[UINavigationController alloc] initWithRootViewController:modalViewController]; 
newViewController.navigationBar.barStyle = self.navigationController.navigationBar.barStyle; 
[self presentViewController:newViewController animated:YES completion:nil]; 
+0

धन्यवाद! सही काम करता है। –

2

मैं सिर्फ पता लगा कि कैसे करना है: तुम कितने तरह, रीति से प्रस्तुत नेविगेशन नियंत्रक को एक ही बात करना है। मुझे एक ही समस्या थी और ऐसा लगता है कि यह एक आकर्षण की तरह काम करता है!

पहली चीज़ जो आपको करने की ज़रूरत है वह है कि आप में एक विशेषता को बदलना है। अपनी परियोजना की फ़ाइल फ़ाइल को NO। विशेषता है: "नियंत्रक-आधारित स्थिति बार उपस्थिति देखें"। यदि विशेषता मौजूद नहीं है, तो बिल्कुल नया जोड़ने के लिए संकोच न करें जैसा मैंने अभी लिखा है (उद्धरण के बिना)।

दूसरी बात यह प्रत्येक दृश्य नियंत्रक के viewDidLoad विधि

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; 

में जोड़ने के लिए यदि आप अपने स्थिति पट्टी के पाठ सफेद होने का या

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; 

चाहते हैं, तो आप ऐसा करने पर आपका स्थिति पट्टी के पाठ चाहते है काली।

यह सब कुछ है!

0

यहां दिए गए सभी उत्तरों की समीक्षा करने के बाद और अन्य उत्तरों में, मैंने पाया है कि मेरे लिए काम करने वाला एकमात्र समाधान व्यू कंट्रोलर के लिए एक खाली नेविगेशन बार बनाना है, मैं मॉड्यूल प्रस्तुत कर रहा हूं।

यह आपके लिए काम नहीं हो सकता है, लेकिन यह निम्न कारणों से मेरे लिए काम करता है:

  1. मेरे मॉडल संवाद एक नेविगेशन पट्टी वैसे भी (हालांकि यह नेविगेशन के लिए नहीं किया जाता है है, यह बस के लिए प्रयोग किया जाता है या तो बचाने या परिणामों को खारिज।
  2. स्थिति पट्टी रंग पहले से ही applicationDidFinishLaunching में आवेदन चौड़ा परिभाषित किया गया है जैसा कि ऊपर चर्चा, और यह एक कस्टम रंग है।

यह एक navigati के लिए एक इंजीनियरिंग के नजरिए से कुछ हद तक परेशान है नियंत्रक पर जो प्रभावी रूप से कुछ भी नहीं करता है, लेकिन बिना किसी के मैं इस समस्या को दूर करने में असमर्थ था।

1

सेट UIViewControllerBasedStatusBarAppearance अपने Info.plist

1

मैं के रूप में आप कर रहे थे एक ही समस्या हो रही थी में कोई है। Info.plist सही था और हर जगह पसंदीदास्टैटसबार स्टाइल को सही ढंग से बुलाया गया था। लेकिन मेरे मोडल व्यू में नहीं। ऐसा इसलिए है क्योंकि पसंदीदाStatusBarStyle नेविगेशन नियंत्रक को भेजा गया था। तो मैं उस दृश्य नियंत्रक यह पेश किया गया था, और देखा preferredStatusBarStyle पर पारित UINavigationController का एक उपवर्ग बनाया है, सभी पुराने व्यवहार एकदम सही ढंग से फिर

10

हाँ करने के लिए सेट YourModalViewControler.modalPresentationCapturesStatusBarAppearance और रखने के "देखें नियंत्रक आधारित स्थिति पट्टी उपस्थिति" हां तक

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.modalPresentationCapturesStatusBarAppearance = YES; 
    .... 
} 

तो ऊपर लिख preferredStatusBarStyle

- (UIStatusBarStyle)preferredStatusBarStyle { 
    return TheStyleYouWant; 
} 
+0

धन्यवाद! किसी भी तरह से 'modalPresentationCapturesStatusBarAppearance' प्रॉपर्टी ने मुझे पूरी तरह से पारित कर दिया था, और जब तक मैंने यह कोशिश नहीं की, मुझे कोई संकेत नहीं था कि मुझे अपना मोडल स्टेटस बार सही तरीके से दिखाया नहीं जा सका। –

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