2010-09-07 22 views
73

Merhaba, programlı olarak genişliği elde etmenin bir yolu olup olmadığını merak ediyorum.IPhone/IPad: Ekran genişliği program aracılığıyla nasıl edinilir?

iphone 3gs, iphone 4, ipad için yeterince genel bir şey arıyorum. Ayrıca, cihazın dikey veya yatay (ipad için) olmasına bağlı olarak genişlik değişmelidir.

Bunu nasıl yapacağını bilen var mı? Bir süredir aradım ... teşekkürler!

+0

(sistem çubuğu olmadan) ekranın genişliği, mevcut uygulama alanı genişliği mı yoksa senin Aradığınız belirli bir bakış genişliği? – VdesmedT

+0

hrmm Emin değilim. Ben sadece cihazın genişliğini istedim sanırım (yani dikey genişlik ve 1024 için genişlik için ipad 768) ama self.view.bounds bunu tatmin görünüyordu. Aşağıda yorumumu gör – foreyez

+0

Cihazın yönünü dikkate alan daha kapsamlı bir yanıt (http://stackoverflow.com/a/7905540/17339). –

cevap

179

UIScreen'a bir göz atın. Örn.,

örn. Eğer (genişlik etkilemez) Durum çubuğu dahil istemiyorsanız

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

applicationFrame tesiste bir göz atın.

GÜNCELLEME: UIScreen (-bounds veya -applicationFrame) mevcut arabirim yönelimini dikkate almaz. UIView'inizin kendi sınırları için sorulması daha doğru bir yaklaşım olacaktır; bu UIView'in View denetleyicisi tarafından otomatik olarak döndürüldüğü varsayılarak.

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

görünüşüdür View Controller tarafından otomatik olarak döndürülmesi değilse o zaman görünüşüdür sınırları hangi kısmının belirlenmesi arayüz yönünü kontrol etmek gerekir width ve height temsil eder. Çerçeve özelliğinin, UIWindow'un (varsayılan olarak) arabirimin yönünü dikkate almayacak olan koordinat alanındaki görünümün rektini vereceğini unutmayın.

+3

aslında, bu ipad yatay yönlendirildiğinde işe yaramaz .. Eğer simülatörüm yatay çalışıyorsa, o zaman hala 768 (1024 yerine) döndürür. Bu durumda oryantasyonu kontrol eden ya da genişlik kazanmanın daha iyi bir yolu var mı diye bir ifade almalı mıyım? – foreyez

+0

Lanet - doğru gibi görünüyor; Cevabımı daha fazla fikirle güncelledim. –

+0

Sadece "CGFloat width = CGRectGetWidth (self.view.bounds)" kullanarak bitti; Benim yöntemimde (didRotateFromInterfaceOrientation için gerek yok) ... böylece en azından self.view.bounds yönünü dikkate alır. Teşekkürler!! Bu eski yazıya tökezleyen diğer kullanıcılar için – foreyez

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

, yönlendirme – rimsky

5

Bu kodun 3 hatlarında yapılabilir:

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 
} 
: Burada
// 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

için bir anlam ifade etmiyor, ancak bu bir UIAlertView görüntüleniyorsa, anahtar penceresi olacak ve rootViewController özelliği sıfır olacak –

+0

@mattbezark True. Bunu bir köşe davası olarak görüyorum. Kök görünümünü elde etmek için bir alternatif var - bu kadar temiz değil, ama herkes ilgilenirse alternatif gönderirim. – memmons

+0

Teşekkürler. Bu çalışma, iOS 7 ve 8. –

0

iOS 9.0'dan itibaren yönlendirmeyi güvenilir şekilde elde etmenin bir yolu yoktur. Bu Ben sadece portre modu için tasarım bir uygulama için kullanılan kod, bu nedenle uygulama yatay modda açılırsa yine doğru olacaktır:

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

kullanın bu kod yardımcı olacaktır

[[UIScreen mainScreen] bounds].size.height 
[[UIScreen mainScreen] bounds].size.width 
0

kullanım:

NSLog(@"%f",[[UIScreen mainScreen] bounds].size.width) ; 
İlgili konular