2015-04-24 15 views
6

मैं एक अजीब iOS 8.3 मुद्दा जो (दृश्य नियंत्रक लैंडस्केप मोड में है, लेकिन कुंजीपटल पोर्ट्रेट मोड में दिखाने) इस तरह की एक गलत अभिविन्यास पर एक कुंजीपटल से पता चलता का सामना करना पड़ रहा हूँ:iOS 8.3 कुंजीपटल उन्मुखीकरण बग

the view controller is in Landscape mode, but the keyboard show up in Portrait mode

मैं इन चरणों का पालन करके इस मुद्दे को गति प्रदान कर सकते हैं:

  1. बनाएं 2 UIViewController उपवर्ग: ViewControllerA और ViewControllerB

  2. ViewControllerA में supportedInterfaceOrientations को लागू करने और वापस जाने के UIInterfaceOrientationMaskPortrait

  3. ViewControllerB में supportedInterfaceOrientations को लागू करने और वापस जाने के UIInterfaceOrientationMaskLandscape

  4. एक UINavigationController उपवर्ग NavigationController बुलाया बनाएँ, supportedInterfaceOrientations को लागू करने और [self.topViewController supportedInterfaceOrientations] वापसी (मैं यह कर रहा हूँ क्योंकि मैं रखना चाहते हैं नेविगेशन नियंत्रक और इसकी रूटवीसी घूर्णन से)

  5. यू se NavigationController अनुप्रयोग के रूप में प्रारंभिक दृश्य नियंत्रक, अनुप्रयोग, ViewControllerA पोर्ट्रेट में दिखाया जाएगा NavigationController के rootViewContrller

  6. लॉन्च के रूप में ViewControllerA निर्धारित किया है। ViewControllerA पर एक बटन दिखाएं, बटन दबाएँ presentViewController:animated:completion

  7. ViewControllerB का उपयोग कर लैंडस्केप में दिखाई देगा द्वारा ViewControllerB पेश करेंगे; ViewControllerB पर टेक्स्ट फ़ील्ड दिखाएं, टेक्स्ट फ़ील्ड पर टैप कीबोर्ड को ट्रिगर करेगा, लेकिन कीबोर्ड ऊपर की छवि की तरह पोर्ट्रेट मोड में है।

पीएस। आप एक्सकोड प्रोजेक्ट on github

डाउनलोड और चला सकते हैं यह समस्या केवल आईओएस 8.3 पर दिखाई देती है। क्या मुझसे कुछ गलत हो रही है ? या शायद यह आईओएस की एक और बग है?

वैसे, यह समस्या तब नहीं होगी जब आप ViewControllerA सीधे ViewController के बिना दिखाएं। तो अगर यह आईओएस का एक बग है, तो मैं UINavigationController उप-वर्ग से कैसे बच सकता हूं लेकिन फिर भी ViewControllerA रखता हूं जो UINavigationController रूट रूट कंट्रोलर है जो घूर्णन से है।


अद्यतन: यह बग अभी भी दिखाई दे आईओएस 8.4 पर, मैं एक बग रिपोर्ट निकाल दिया और जून 2015 को 17 वीं सेब से उत्तर मिला, उन्होंने कहा कि यह नवीनतम आईओएस 9 बीटा में संबोधित किया गया है।

उत्तर

2

डिवाइस को यह सोचने में हमें इस मुद्दे के आसपास मिल गया कि यह एक अलग अभिविन्यास में घुमाया गया था और फिर इसके इच्छित अभिविन्यास में।

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    self.segmentedControl.selectedSegmentIndex = 0; 
    if(!self.rotatingForDismissal) 
    { 
     [self.tableNumberTextField becomeFirstResponder]; 
    } 


    if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.3")) 
    { 
     [[UIDevice currentDevice] setValue:@(UIDeviceOrientationLandscapeLeft) forKey:@"orientation"]; 
     [[UIDevice currentDevice] setValue:@(self.interfaceOrientation) forKey:@"orientation"]; 
    } 

} 
+0

हाँ से एक ही समस्या को देखकर हाँ! यह मेरी तुलना में एक बेहतर समाधान है। धन्यवाद ! – ultragtx

+0

मैं GoogleMap 1.9.0 का उपयोग कर रहा हूं और अभी भी काम नहीं कर रहा हूं –

3

मैं एक तकनीकी सहायता पूछा है और उन्होंने कहा कि

हमारे इंजीनियरों आपके अनुरोध की समीक्षा की और तय किया कि यह सबसे अच्छा एक बग रिपोर्ट के रूप में व्यवहार किया जाएगा।

ऐसा लगता है कि यह एक सिस्टम बग की पुष्टि है।

और मेरे वर्तमान समाधान जोड़ रहा है एक ViewControllerC ViewControllerA और ViewControllerB के बीच (दोनों पोर्ट्रेट और लैंडस्केप मोड का समर्थन): ViewControllerA, एनीमेशन के साथ ViewControllerC मौजूद होना चाहिए के बाद ViewControllerC एनीमेशन के बिना दिखाई दिया, वर्तमान ViewControllerB।

संक्रमण को प्राकृतिक बनाने के लिए, आप समान पृष्ठभूमि रंग को ViewControllerB के रूप में ViewControllerC पर सेट कर सकते हैं, या ViewControllerB का स्क्रीन शॉट ले सकते हैं और इसे पृष्ठभूमि छवि के रूप में ViewControllerC में जोड़ सकते हैं।

यह उपयोगकर्ताओं के लिए एक सही समाधान नहीं है, वे पता लगा सकते हैं कि ViewControllerB को लोड करने में अधिक समय लगता है।

+0

क्या आपने इस मुद्दे के खिलाफ रडार दर्ज किया था? आईओएस 8.3 – user1165756

0

मैं निम्नलिखित का उपयोग कर कीबोर्ड को सही तरीके से प्रकट करने में सक्षम था।

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

    if (SYSTEM_VERSION_GREATER_THAN(@"7.1") && SYSTEM_VERSION_LESS_THAN(@"9.0")) 
    { 
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; 
    [[UIDevice currentDevice] setValue:@(UIDeviceOrientationUnknown) forKey:@"orientation"]; 
    [[UIDevice currentDevice] setValue:@(orientation) forKey:@"orientation"]; 
    } 
} 

ध्यान दें कि UIDeviceOrientationUnknown का उपयोग कर इस तरह के विचारों के अनुचित ऑटो रोटेशन के रूप में दुष्प्रभाव का कारण नहीं है।

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