Frage IPhone / IPad: Wie man Bildschirmbreite programmgesteuert erhält?


Hi Ich frage mich, ob es eine Möglichkeit gibt, die Breite programmgesteuert zu erhalten.

Ich suche nach etwas allgemein genug, um iphone 3gs, iphone 4, ipad unterzubringen. Außerdem sollte sich die Breite ändern, je nachdem ob das Gerät im Hoch- oder Querformat (für iPad) ist.

Weiß jemand wie man das macht ?? Ich habe eine Weile gesucht ... Danke!


75
2017-09-07 00:54


Ursprung


Antworten:


Sieh dir das an UIScreen.

z.B.

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

Sehen Sie sich die Eigenschaft applicationFrame an, wenn die Statusleiste nicht enthalten sein soll (wirkt sich nicht auf die Breite aus).

AKTUALISIEREN: Es stellt sich heraus, dass UIScreen (-bounds oder -applicationFrame) die aktuelle Schnittstellenausrichtung nicht berücksichtigt. Ein korrekterer Ansatz bestünde darin, Ihren UIView nach seinen Grenzen zu fragen - vorausgesetzt, diese UIView wurde von ihrem View-Controller automatisch gedreht.

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

Wenn die Ansicht nicht automatisch vom View-Controller gedreht wird, müssen Sie die Ausrichtung der Benutzeroberfläche überprüfen, um festzustellen, welcher Teil der Ansichtsgrenzen die "Breite" und die "Höhe" darstellt. Beachten Sie, dass die Eigenschaft frame Ihnen die Rechte der Ansicht im UIWindow-Koordinatenraum gibt, die (standardmäßig) nicht die Schnittstellenausrichtung berücksichtigt.


182
2017-09-07 00:57



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

11
2017-09-07 01:01



Dies kann in. Getan werden in 3 Zeilen Code:

// 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];

6
2018-03-29 17:08



Ab iOS 9.0 gibt es keine Möglichkeit, die Ausrichtung zuverlässig zu erhalten. Dies ist der Code, den ich für eine App verwendet habe, die ich nur für den Hochformat-Modus entwerfe. Wenn die App also im Querformat geöffnet wird, ist sie immer noch korrekt:

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

0
2018-02-28 22:44



Verwenden Sie diesen Code, der Ihnen helfen wird

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

0
2018-06-02 17:35



benutzen:

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

0
2018-02-16 07:06



Hier ist eine schnelle Möglichkeit, Bildschirmgrößen zu erhalten, dies berücksichtigt auch aktuelle Schnittstellenausrichtung:

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
}

Diese sind als Standardfunktion enthalten in:

https://github.com/gobtugyil/EZSwiftExtensions


-2
2017-11-24 04:54