IPhone / IPad: प्रोग्राम से स्क्रीन की चौड़ाई कैसे प्राप्त करें?


83

नमस्ते, मैं सोच रहा हूँ अगर वहाँ एक तरीका है प्रोग्राम को चौड़ाई मिल रहा है।

मैं iPhone 3gs, iphone 4, ipad को समायोजित करने के लिए पर्याप्त सामान्य कुछ ढूंढ रहा हूं। इसके अलावा, डिवाइस के पोर्ट्रेट या लैंडस्केप (आईपैड के लिए) के आधार पर चौड़ाई बदलनी चाहिए।

क्या किसी को पता है कि इसे कैसे करते हैं?? मैं थोड़ी देर से देख रहा हूँ ... धन्यवाद!


क्या स्क्रीन की चौड़ाई, उपलब्ध एप्लिकेशन स्पेस की चौड़ाई (सिस्टम बार के बिना) या आपके द्वारा खोजे जा रहे किसी विशेष दृश्य की चौड़ाई है?
VdesmedT

मुझे यकीन नहीं हो रहा है मुझे लगता है कि मैं सिर्फ डिवाइस की चौड़ाई (यानी पोर्ट्रेट चौड़ाई के लिए आईपैड 768 और लैंडस्केप चौड़ाई के लिए 1024) चाहता था, लेकिन self.view.bounds यह संतुष्ट करने के लिए लग रहा था। मेरी टिप्पणी नीचे देखें
foreyez

यह अधिक व्यापक उत्तर देखें जो डिवाइस के अभिविन्यास को ध्यान में रखता है।
ड्रू स्टीफंस

@DrewStephens नीचे मेरा उत्तर देखें जो खाता अभिविन्यास में लेता है और कोड की केवल 3 पंक्तियाँ हैं: D।
memmons

जवाबों:


204

UIScreen पर एक नज़र डालें

जैसे।

CGFloat width = [UIScreen mainScreen].bounds.size.width;

यदि आप स्थिति पट्टी को शामिल नहीं करना चाहते हैं, तो एप्लिकेशनफ़्रेम प्रॉपर्टी पर एक नज़र डालें (चौड़ाई को प्रभावित नहीं करेगा)।

अद्यतन: यह UIScreen (-bounds या -applicationFrame) को चालू इंटरफ़ेस अभिविन्यास को ध्यान में नहीं रखता है। एक और सही तरीका यह होगा कि आप अपने UIView को इसकी सीमा के लिए पूछें - यह मानते हुए कि इस UIView को व्यू कंट्रोलर द्वारा ऑटो-रोटेट किया गया है।

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    CGFloat width = CGRectGetWidth(self.view.bounds);
}

अगर व्यू कंट्रोलर द्वारा व्यू को ऑटो-रोटेट नहीं किया जा रहा है, तो आपको यह देखने के लिए इंटरफ़ेस ओरिएंटेशन की जांच करनी होगी कि व्यू बाउंड का कौन सा हिस्सा 'चौड़ाई' और 'हाइट' को दर्शाता है। ध्यान दें कि फ्रेम प्रॉपर्टी आपको UIWindow के कोऑर्डिनेट स्पेस में दृश्य की परिभाषा देगी जो (डिफ़ॉल्ट रूप से) इंटरफ़ेस ओरिएंटेशन को ध्यान में नहीं रखेगी।


3
वास्तव में, यह तब काम नहीं करता है जब आईपैड ओरिएंटेड लैंडस्केप है .. यानी, अगर मेरा सिम्युलेटर लैंडस्केप चल रहा है तो यह अभी भी 768 (1024 के बजाय) लौटता है। क्या आपको लगता है कि मेरे पास एक ऐसा बयान होना चाहिए जो उस मामले में अभिविन्यास की जांच करता है या चौड़ाई प्राप्त करने का एक बेहतर तरीका है?
foreyez

धिक्कार है - जैसे आप सही हैं; मैंने कुछ और विचारों के साथ अपना उत्तर अपडेट किया है।
एलन रोजर्स

मैंने केवल "CGFloat चौड़ाई = CGRectGetWidth (self.view.bounds)" का उपयोग करके समाप्त किया; मेरे तरीके में (didRotateFromInterfaceOrientation के लिए कोई ज़रूरत नहीं है) ... तो कम से कम self.view.bounds खाते में अभिविन्यास लेता है। धन्यवाद!!

5
दूसरों के लिए, जो इस पुराने पद पर ठोकर खा सकते हैं, मैंने पाया कि self.view.bounds केवल पूरी तरह से सटीक है जो didRotateFromInterfaceOrientation में शुरू होता है। यदि यह दृश्य अपने प्रारंभिक लक्ष्य अभिविन्यास (आईबी में निर्दिष्ट) के रूप में दिखाया गया है, तो यह व्यूडलडैड और व्यूविलेऐपियर में भी सटीक होगा। यदि दृश्य को एक अलग अभिविन्यास में दिखाया गया है तो लक्षित किया गया है, viewDidLoad (और viewWillAppear) को didRotateFromInterfaceOrientation और view.bounds गलत होने से पहले कहा जाता है
rimsky

IOS 6 के मामले में, और जब हम मोडल नियंत्रकों का उपयोग करते हैं, तो didRotateFromInterfaceOrientation नहीं कहा जाएगा
कृष्णन

12
CGRect screen = [[UIScreen mainScreen] bounds];
CGFloat width = CGRectGetWidth(screen);
//Bonus height.
CGFloat height = CGRectGetHeight(screen);

10
अभिविन्यास के लिए
जिम्मेदार

6

यह कोड की 3 पंक्तियों में किया जा सकता है :

// grab the window frame and adjust it for orientation
UIView *rootView = [[[UIApplication sharedApplication] keyWindow] 
                                   rootViewController].view;
CGRect originalFrame = [[UIScreen mainScreen] bounds];
CGRect adjustedFrame = [rootView convertRect:originalFrame fromView:nil];

3
यह करीब है, लेकिन अगर एक UIAlertView प्रदर्शित किया जा रहा है, तो यह महत्वपूर्ण विंडो होगी और इसकी जड़ दृश्य नियंत्रक संपत्ति शून्य होगी
मैट bezark

@mattbezark सच। मुझे लगता है कि एक कोने का मामला है। रूट दृश्य प्राप्त करने के लिए एक विकल्प है - यह एक के रूप में साफ नहीं है, लेकिन अगर कोई दिलचस्पी रखता है तो मैं इस विकल्प को पोस्ट करूंगा।
मेमोन

@ मम्मों को पार्टी में थोड़ी देर हो गई लेकिन मुझे आपके वैकल्पिक समाधान में दिलचस्पी होगी :)
alexgophermix

0

IOS 9.0 के रूप में ओरिएंटेशन को मज़बूती से प्राप्त करने का कोई तरीका नहीं है। यह वह कोड है जिसका उपयोग मैंने एक ऐप I डिज़ाइन के लिए केवल पोर्ट्रेट मोड के लिए किया था, इसलिए यदि ऐप को लैंडस्केप मोड में खोला जाता है तो यह अभी भी सटीक होगा:

screenHeight = [[UIScreen mainScreen] bounds].size.height;
screenWidth = [[UIScreen mainScreen] bounds].size.width;
if (screenWidth > screenHeight) {
    float tempHeight = screenWidth;
    screenWidth = screenHeight;
    screenHeight = tempHeight;
}



-2

यहाँ स्क्रीन आकार प्राप्त करने के लिए एक स्विफ्ट तरीका है, यह वर्तमान इंटरफ़ेस अभिविन्यास को भी ध्यान में रखता है:

var screenWidth: CGFloat {
    if UIInterfaceOrientationIsPortrait(screenOrientation) {
        return UIScreen.mainScreen().bounds.size.width
    } else {
        return UIScreen.mainScreen().bounds.size.height
    }
}
var screenHeight: CGFloat {
    if UIInterfaceOrientationIsPortrait(screenOrientation) {
        return UIScreen.mainScreen().bounds.size.height
    } else {
        return UIScreen.mainScreen().bounds.size.width
    }
}
var screenOrientation: UIInterfaceOrientation {
    return UIApplication.sharedApplication().statusBarOrientation
}

इन्हें एक मानक फ़ंक्शन के रूप में शामिल किया गया है:

https://github.com/goktugyil/EZSwiftExtensions

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.