2012-09-23 22 views
10

मुझे एक ऐप मिला है जहां मेरे पास rootViewController के रूप में UINavigationController सबक्लास है। मुझे UITableViewController मिल गया है जो उपयोगकर्ता को कुछ सेटिंग्स संपादित करने देता है, यह हमेशा पोर्ट्रेट मोड में होना चाहिए। नेविगेशन नियंत्रक पर मूवीप्लेयर घटक को धक्का देने के बाद भी मेरे ऐप को अन्य सभी उन्मुखताओं का समर्थन करने की आवश्यकता है।आईओएस 6 ऑटो रोटेशन इश्यू - समर्थित इंटरफेसऑरिएंटेशन रिटर्न वैल्यू

- (NSUInteger)supportedInterfaceOrientations { 
    LLog(); 
    return UIInterfaceOrientationMaskPortrait; 
} 

प्रवेश आदेश मुझसे कहता है कि यह वास्तव में बुलाया जाता है:

UITableViewController उपवर्ग supportedInterfaceOrientations के इस कार्यान्वयन है।

समस्या यह है कि वापसी मूल्य का सम्मान नहीं किया जाता है, यानी जब मैं डिवाइस चालू करता हूं तो स्क्रीन लैंडस्केप ओरिएंटेशन में बदल जाती है।

सेटिंग दृश्य हमेशा चित्र में दिखाने के लिए मैं क्या कर सकता हूं लेकिन वीडियो व्यूअर के लिए अभिविन्यास परिवर्तन की अनुमति देता हूं?

अधिक जानकारी: मेरा UINavigationController सबक्लास ओवरराइड नहीं करता हैऑटोरोटेट या समर्थित इंटरफेसऑरिएंटेशन। मैं अपने AppDelegate में

- (NSUInteger)application:(UIApplication *)application 

supportedInterfaceOrientationsForWindow:(UIWindow *)window 
विधि

लागू नहीं किया है और मैं लक्ष्य सारांश में सभी झुकाव सक्षम है।

- (BOOL)shouldAutorotate { 
    return NO; 
} 

और सेट समर्थित रोटेशन एप्लिकेशन plist फ़ाइल में जड़ दृश्य नियंत्रक के लिए केवल portrait रहे हैं:

उत्तर

17

मुझे यह मुद्दा था कि नेविगेशन स्टैक में कुछ ViewControllers सभी ओरिएंटेशन, कुछ केवल पोर्ट्रेट का समर्थन करते हैं, लेकिन UINavigation नियंत्रक सभी ऐप समर्थित ओरिएंटेशन लौट रहा था, इस छोटे से हैक ने मेरी मदद की।

@implementation UINavigationController (iOS6OrientationFix) 

-(NSUInteger) supportedInterfaceOrientations { 
    return [self.topViewController supportedInterfaceOrientations]; 
} 

@end 
+0

यह निश्चित रूप से एक रचनात्मक समाधान है, लेकिन मैं विश्वास नहीं कर सकता यह एप्पल हमें क्या करने की उम्मीद है क्या है: मैं UIViewController के ऐसे वर्ग के साथ मेरी समस्या का समाधान। मुझे अपनी नई ऑटोरोटेशन योजना को समझने में परेशानी हो रही है। वे शीर्ष पूर्ण स्क्रीन ViewController नियम कहते हैं। लेकिन, जैसा कि आप इंगित कर रहे हैं, शीर्ष पूर्ण स्क्रीन व्यू कंट्रोलर कई मामलों में नेविगेशन नियंत्रक है। क्या हम इसे subclass करना चाहते हैं, या समर्थित इंटरफेसऑरिएंटेशन संदेश को लागू करने के लिए एक श्रेणी बनाते हैं? सही महसूस नहीं करता है। – eddy

+0

यह मेरे लिए भी सही नहीं लगता है, शायद यह ऐप्पल कार्यान्वयन में बस एक बग है। – Mindaugas

+0

यह मेरे लिए काम नहीं करता है। मैंने उप-वर्ग की कोशिश की है क्योंकि श्रेणियां विधि ओवरराइड सुनिश्चित नहीं करती हैं :( – Pacu

2

तुम भी जोड़ने की जरूरत है।

2

UINavigationController के लिए श्रेणी मेरे लिए काम नहीं कर रही है। मुझे नहीं पता क्यों।

@implementation UIViewController (Orientation) 

- (BOOL) shouldAutorotate 
{ 
    return YES; 
} 


- (NSUInteger)supportedInterfaceOrientations 
{ 
    NSUInteger orientations = UIInterfaceOrientationMaskPortrait; 

    if ([self isKindOfClass:[PlayerViewController class]]) 
    { 

     orientations |= UIInterfaceOrientationMaskLandscapeLeft; 
     orientations |= UIInterfaceOrientationMaskLandscapeRight; 

    } 

    return orientations; 
} 

@end