आप UIInterfaceOrientationIsPortrait([UIApplication sharedApplication].statusBarOrientation)ओरिएंटेशन निर्धारित करने के लिए कुछ का उपयोग कर सकते हैं और फिर तदनुसार आयामों का उपयोग कर सकते हैं।
कैसे, UIViewController में एक अभिविन्यास परिवर्तन के दौरान
- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
duration:(NSTimeInterval)duration
toInterfaceOrientationUIApplication के स्टेटस के बाद से ओरिएंटेशन का उपयोग करें ।ऑरिजनेशन अभी भी पुराने ओरिएंटेशन को इंगित करेगा क्योंकि यह अभी तक नहीं बदला है (क्योंकि आप एक willइवेंट हैंडलर के अंदर हैं )।
सारांश
इसके लिए कई संबंधित पोस्ट हैं, लेकिन उनमें से प्रत्येक यह दर्शाता है कि आपको यह करना है:
- को देखो
[[UIScreen mainScreen] bounds]आयाम प्राप्त करने के लिए,
- जांचें कि आप किस अभिविन्यास में हैं, और
- स्थिति बार ऊंचाई के लिए खाता (यदि दिखाया गया है)
लिंक
कार्य कोड
मैं आमतौर पर इससे दूर नहीं जाता, लेकिन आपने मेरी रुचि को बढ़ा दिया। निम्नलिखित कोड को चाल करना चाहिए। मैंने UIApplication पर एक श्रेणी लिखी। मैंने दिए गए अभिविन्यास में करंट साइज़ या साइज़ पाने के लिए क्लास मेथड्स जोड़े, जिसे आप UIViewController में कहेंगे willRotateToInterfaceOrientation:duration:।
@interface UIApplication (AppDimensions)
+(CGSize) currentSize;
+(CGSize) sizeInOrientation:(UIInterfaceOrientation)orientation;
@end
@implementation UIApplication (AppDimensions)
+(CGSize) currentSize
{
return [UIApplication sizeInOrientation:[UIApplication sharedApplication].statusBarOrientation];
}
+(CGSize) sizeInOrientation:(UIInterfaceOrientation)orientation
{
CGSize size = [UIScreen mainScreen].bounds.size;
UIApplication *application = [UIApplication sharedApplication];
if (UIInterfaceOrientationIsLandscape(orientation))
{
size = CGSizeMake(size.height, size.width);
}
if (application.statusBarHidden == NO)
{
size.height -= MIN(application.statusBarFrame.size.width, application.statusBarFrame.size.height);
}
return size;
}
@end
कोड सरल कॉल का उपयोग करने के लिए [UIApplication currentSize]। इसके अलावा, मैंने उपरोक्त कोड चलाया, इसलिए मुझे पता है कि यह काम करता है और सभी झुकावों में सही प्रतिक्रियाओं की रिपोर्ट करता है। ध्यान दें कि मैं स्थिति पट्टी में कारक हूं। दिलचस्प बात यह है कि मुझे स्टेटस बार की ऊंचाई और चौड़ाई को घटाना था।
उम्मीद है की यह मदद करेगा। : डी
अन्य विचार
आप UIWindow की rootViewControllerसंपत्ति को देखकर आयाम प्राप्त कर सकते हैं। मैंने इसे अतीत में देखा है और यह चित्र और परिदृश्य दोनों में समान आयामों की रिपोर्ट करता है, सिवाय इसके कि यह रोटेट ट्रांसफ़ॉर्म होने की रिपोर्ट करता है:
(gdb) पो [[[[[अपर साझाकरण
<UILayoutContainerView: 0xf7296f0; फ्रेम = (0 0; 320 480); रूपांतर = [0, -1, 1, 0, 0, 0]; autoresize = W + H; परत = <CALayer: 0xf729b80 >>
(gdb) पो [[[[[अपर साझाकरण
<UILayoutContainerView: 0xf7296f0; फ्रेम = (0 0; 320 480); autoresize = W + H; परत = <CALayer: 0xf729b80 >>
यह निश्चित नहीं है कि आपका ऐप कैसे काम करता है, लेकिन यदि आप किसी प्रकार के नेविगेशन नियंत्रक का उपयोग नहीं कर रहे हैं, तो आप अपने मुख्य दृश्य के तहत माता-पिता की अधिकतम ऊंचाई / चौड़ाई और माता-पिता के साथ बढ़ते / सिकुड़ सकते हैं। तब आप कर सकते हैं:[[[[[[[UIApplication sharedApplication] keyWindow] rootViewController] view] subviews] objectAtIndex:0] frame] :। यह एक लाइन पर बहुत तीव्र लग रहा है, लेकिन आपको यह विचार मिलता है।
हालाँकि ... सारांश के तहत उपरोक्त 3 चरणों को करना अभी भी बेहतर होगा। UIWindows के साथ खिलवाड़ करना शुरू करें और आपको अजीब चीजें मिलेंगी, जैसे कि UIAlertView दिखाना UIApplication के कीविंडो को एक नए UIWindow पर इंगित करने के लिए बदल देगा जिसे UIAlertView ने बनाया है। किसे पता था? मैंने कीविन्दो पर निर्भर एक बग को खोजने के बाद किया और यह खोज की कि यह उस तरह बदल गया है!