2012-11-08 11 views
5

संभव डुप्लिकेट नहीं बदलता है:
“Incorrect” frame/window size after re-orientation in iPhoneIOS 6 रोटेशन बग: खिड़की और रूट देखें नियंत्रक फ्रेम रोटेशन के बावजूद

मैं एक ऐप्स के साथ एक बहुत निराशा होती है इस मुद्दे को हल करने के लिए कोशिश कर रहा हूँ मेरा - इसका अध्ययन करने में मुझे आईओएस में एक बग मिल सकती है:

जब आप आईपैड घुमाते हैं, तो दृश्य घूमता है, लेकिन यह फ्रेम नहीं बदलता है। मैं एक टाइमर चला रहा हूं जो प्रति सेकंड मेरे दृश्य की चौड़ाई और ऊंचाई को प्रिंट करता है, और हालांकि मैं दृश्य को दृश्यमान रूप से घूमता देख सकता हूं, फ्रेम "768x1024" रहता है चाहे कोई फर्क नहीं पड़ता।

एप्पल डॉक्स से:

जब यूजर इंटरफेस घूमता है, खिड़की नई उन्मुखीकरण मैच के लिए आकार दिया जाता है। विंडो नए आकार से मेल खाने के लिए अपने रूट व्यू कंट्रोलर के फ्रेम को समायोजित करती है, और इस आकार को बदले में दृश्य पदानुक्रम को अन्य दृश्यों में फैलाया जाता है।

यह वही है जो नहीं हो रहा है, और यह मुझे सभी प्रकार की परेशानी का कारण बन रहा है। क्या कोई जानता है कि रोटेशन को कैसे ठीक किया जाए ताकि फ्रेम बदल जाए?

कदम पुन: पेश करने:

  1. एक नया खाली परियोजना
  2. रूट दृश्य
  3. एक टाइमर बाहर रूट दृश्य नियंत्रक के फ्रेम चौड़ाई मुद्रित करने के लिए और ऊंचाई
  4. सेट के रूप में एक हड्डी शेयर UIViewController जोड़े बनाएं
  5. अपना ऐप चलाएं, और इसे चारों ओर घुमाएं।
 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    self.window.rootViewController = [[UIViewController alloc] init]; 

    NSLog(@"%fx%f", self.window.rootViewController.view.frame.size.width, self.window.rootViewController.view.frame.size.height); 

    // Add a label to confirm orientation 
    UILabel *orientationLabel = [[UILabel alloc] initWithFrame:CGRectMake(10,10,100,30)]; 
    orientationLabel.text = @"Top Left"; 
    [self.window.rootViewController.view addSubview: orientationLabel]; 

    [NSTimer scheduledTimerWithTimeInterval:.3 target:self selector:@selector(testScale) userInfo:nil repeats:YES]; 

    self.window.backgroundColor = [UIColor whiteColor]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 
 
- (void) testScale { 
    NSLog(@"%fx%f", self.window.rootViewController.view.frame.size.width, self.window.rootViewController.view.frame.size.height); 
} 
+0

की डुप्लीकेट http://stackoverflow.com/questions/2686882/incorrect-frame-window-size-after-re-orientation-in-iphone और http://स्टैक ओवरफ़्लो।com/प्रश्न/11150495/ios-uiview-get-frame-after-rotation – Bot

उत्तर

0

नहीं एक बग: यहाँ मेरी कोड मैं के साथ परीक्षण कर रहा हूँ है। आप जो चाहते हैं वह का उपयोग frame

इस तरह से सोचें। जब आप अपने डिवाइस को घुमाते हैं, तो डिवाइस अपने स्क्रीन आकार को बदल नहीं रहा है। यह वही रहता है, हालांकि दृश्य बदल रहा है। तो यही कारण है कि आप सीमाओं का उपयोग करना चाहते हैं।

+0

ऐसा लगता है कि यह स्पष्ट रूप से ऐप्पल आईओएस 6 दस्तावेज़ों का विरोध करता है, जो कहता है "अपने मूल दृश्य नियंत्रक के फ्रेम को समायोजित करता है" – user441669

+0

@ user441669 कई डुप्लिकेट प्रश्न हैं यह बहुत बात बताओ। – Bot

0

आप एक साथ स्थिति पट्टी

[[UIApplication sharedApplication] statusBarOrientation] 

के राज्य का उपयोग कर सकते अगर बयान, आप पता कर सकते हैं, तो स्क्रीन लैंडस्केप या पोर्ट्रेट

1

आप एक के अंदर अपने UIViewController डाल करने की कोशिश की है इसके बजाय UINavigationController? मेरे पास एक समान समस्या थी और इसे ठीक कर दिया। UINavigationController क्लास UIViewController की तुलना में बेहतर रोटेशन को संभालने लगता है। इस तरह

कोशिश कुछ:

UIViewController *myViewController = [[UIViewController alloc] init]; 
UINavigationController *myNavigationController = [[UINavigationController alloc] initWithRootViewController:myViewController]; 
self.window.rootViewController = myNavigationController; 
+0

धन्यवाद, मैं कल यह कोशिश करूंगा – user441669

+1

मैं आपको धन्यवाद देना चाहता हूं। मैं यह जानने के लिए 2 दिन ऑनलाइन ढूंढ रहा हूं कि कहीं भी कोई यह समझा सकता है कि मेरा 5.1 ऐप पूरी तरह से 6.1 में क्यों टूट गया। मुझे नेविगेशनबार और यूआईवीव के बीच काली पट्टी मिल रही थी, और नेविगेशनबार घूर्णन नहीं कर रहा था, जबकि शेष दृश्य घूमता था। यह सरल जादू रेखा: \t self.window.navigationController = self.navigationController; AppDelegate में यह मेरे लिए तय! फिर से, बहुत बहुत धन्यवाद ! –

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