2011-03-03 12 views
18

मैं आईपैड ऐप में एक splitView का उपयोग कर रहा हूँ। विस्तार दृश्य में 2 सबव्यू है जो खुद को etail दृश्य सीमाओं के अनुसार खींचता है। समस्या यह है कि जब भी आईपैड लैंडस्केप मोड में होता है तब भी वे खुद को (1024, 768) में आकर्षित करते हैं।स्प्लिट व्यू विवरण देखें गलत दृश्य फ्रेम देता है?

बीटीडब्ल्यू - अगर मैं पोर्ट्रेट मोड में कॉल करता हूं और फिर आईपैड को घुमाता हूं तो वे स्केल करते हैं (706,768)।

मैं विवरण दृश्य फ्रेम और सीमा जाँच की है के रूप में यह बनाया (देखें किया लोड विधि में) और दोनों ही मामलों में मैं इस मिल:

NSLog(@"screen frame = %@",NSStringFromCGRect(self.view.frame)); 
NSLog(@"screen bounds = %@",NSStringFromCGRect(self.view.bounds)); 

डिबग विंडो में मैं:

2011-03-03 10:58:19.376 English Club[63347:207] screen frame = {{0, 0}, {768, 1024}} 
2011-03-03 10:58:19.382 English Club[63347:207] screen bounds = {{0, 0}, {768, 1024}} 

मुझे पता नहीं है कि समस्या कहां है। क्या कोई मेरी मदद कर सकता है?

किसी भी मदद के लिए धन्यवाद।

+0

मैंने इस विषम मुद्दे को भी देखा है। मैं ऐप्पल के साथ एक बग रिपोर्ट दर्ज करने की अनुशंसा करता हूं - यही वह है जो मैंने किया था। http://bugreporter.apple.com – Jasarien

+2

क्या ऐप्पल ने इस बग फाइलिंग का जवाब दिया था? बीटीडब्ल्यू, आप उन सबव्यूव को मुख्य दृश्य में कैसे जोड़ रहे हैं? क्या आप उन पर ऑटोरेसाइज गुणों को सही ढंग से सेट कर रहे हैं? क्या आप अपनी समस्या में गहराई से हमें और कोड दिखा सकते हैं? धन्यवाद – marzapower

+0

तो, आप वास्तव में क्या करना चाहते हैं? क्या आप विस्तार दृश्य के आकार को सेट करना चाहते हैं। या दृश्य दृश्य के अंदर दृश्य। आप दृश्य दृश्य के अंदर फ्रेम आकार को सेट कर सकते हैं लेकिन विस्तार दृश्य का आकार नहीं है क्योंकि दृश्य का आधार आकार splitviewcontroller के अनुसार मानक रहेगा। यदि आपके पास अलग प्रश्न है तो कृपया मुझे बताएं। – AppAspect

उत्तर

6

viewDidLoad में दृश्य का वास्तविक आकार नहीं होना चाहिए। यह बाद में लेआउट विधियों द्वारा स्थापित किया गया है। लेकिन यह आपको नहीं रोकना चाहिए :) आप अपने ऑटोरेसाइजिंग मास्क कैसे सेट करते हैं? यदि आपने इसे सही तरीके से सेट किया है, तो सबकुछ ठीक होना चाहिए।

+0

धन्यवाद, मैं इसे फिर से देखूंगा। – shannoga

1

हाँ आप autoresizing संपत्ति यह ठीक होना चाहिए ..

आप निब के माध्यम से या कोड से

self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; 

चियर्स उन्हें सेट कर सकते हैं ...

+0

धन्यवाद मैं कोशिश करूँगा – shannoga

2

मैं वर्तमान में एक लिख रहा हूँ सेट किया है UISplitViewController ऐप, और विस्तार के आकार को बदलने या मास्टर व्यू को प्रतिबंधित करने से निराश था। यह पूरी तरह से उन उप फ्रेम के आकार का प्रभारी है।

UINavigationController और UITabBarController की तरह, UISplitViewController एक 'कंटेनर' व्यू कंट्रोलर है, और यह इसके उद्देश्यों को फिट करने के लिए इसके सबव्यूज़ को आकार देता है।

समारोह आत्म debugDumpTheFrames uisplitviewcontroller के फ्रेम बाहर प्रिंट और यह दो subframes है। मैं splitViewController के viewDidLoad में फ्रेम प्रिंट, और 2 सेकंड बाद में इस समारोह को दूसरी बार कॉल करने के लिए एक टाइमर सेट (जो समय के दौरान मैं कुछ न करें):

[self debugDumpTheFrames]; 
NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:2.0f target:self selector:@selector(debugDumpTheFrames) userInfo:nil repeats:NO]; 

अगर हम उत्पादन को देखें, हम देख सकते हैं कि कुछ समय के बाद viewDidLoad, UISplitViewController यह subviews के फ्रेम बदल गया है।

size of splitviewcontrollers view frame {{0, 0}, {748, 1024}} 
size of splitviewcontrollers detail view frame {{0, 0}, {768, 1024}} 
size of splitviewcontrollers master view frame {{0, 0}, {768, 1024}} 

size of splitviewcontrollers view frame {{0, 0}, {748, 1024}} 
size of splitviewcontrollers detail view frame {{321, 0}, {703, 748}} 
size of splitviewcontrollers master view frame {{0, 0}, {320, 748}} 

जहां यह आकार बदलता है मैं बिल्कुल अनिश्चित हूं; लेकिन uisplitviewcontroller उन फ्रेम के मालिक है, और वे निजी संपत्तियों तो छू उन्हें दुकान से अस्वीकृति के लिए आधार है।

3

viewWillAppear बजाय viewDidLoad में अपने संचालन करते हैं।

4

यदि आप के लिए प्रतीक्षा - (शून्य) viewDidLayoutSubviews यह सही आकार होगा

0

तुम सच में viewDidLoad में सही चौड़ाई प्राप्त करने की आवश्यकता है, तो आप विभाजित दृश्य नियंत्रक का उपयोग और की चौड़ाई प्राप्त कर सकते हैं विवरण दृश्य नियंत्रक।

उदा। स्विफ्ट में:

func getDetailViewSize() -> CGSize { 
    var detailViewController: UIViewController 
    if (self.splitViewController?.viewControllers.count > 1) { 
     detailViewController = self.splitViewController?.viewControllers[1] as! UIViewController 
    } else { 
     detailViewController = self.splitViewController?.viewControllers[0] as! UIViewController 
    } 
    return detailViewController.view.frame.size 
} 
संबंधित मुद्दे