webentwicklung-frage-antwort-db.com.de

IPhone-Statusleistenhöhe abrufen

Ich muss einige Elemente in Bezug auf die Höhe der Statusleiste des iPhones ändern. Ich weiß, dass die Statusleiste normalerweise 20 Punkte hoch ist. Dies ist jedoch nicht der Fall, wenn sie sich im Tethering-Modus befindet. Es wird auf 40 verdoppelt. Wie lässt sich die Höhe bestimmen? ich habe es versucht 

[[UIApplication sharedApplication] statusBarFrame]

aber es gibt mir 20 x 480 im Querformat, was korrekt ist, aber dann gibt es 320 x 40 im Hochformat. Warum gibt es mir nicht das Gegenteil davon (40 x 320)?

60
Kyle Decot

Der statusBarFrame gibt den Frame in Bildschirmkoordinaten zurück. Ich glaube, der richtige Weg, um zu erfahren, was dies in Ansichtskoordinaten bedeutet, ist Folgendes zu tun:

- (CGRect)statusBarFrameViewRect:(UIView*)view 
{
    CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame];

    CGRect statusBarWindowRect = [view.window convertRect:statusBarFrame fromWindow: nil];

    CGRect statusBarViewRect = [view convertRect:statusBarWindowRect fromView: nil];

    return statusBarViewRect;
}

In den meisten Fällen verwendet das Fenster die gleichen Koordinaten wie der Bildschirm, so dass [UIWindow convertRect:fromWindow:] nichts ändert, aber für den Fall, dass sie sich unterscheiden könnten, sollte diese Methode das Richtige tun.

80
ThomasW

Hast du es so gemacht:

CGRect rect;

rect = [[UIApplication sharedApplication] statusBarFrame];
NSLog(@"Statusbar frame: %1.0f, %1.0f, %1.0f, %1.0f", rect.Origin.x, rect.Origin.y, rect.size.width, rect.size.height);
14
o15a3d4l11s2

EDIT Um herauszufinden, wo Sie den oberen Bereich Ihres Ansichtsinhalts platzieren möchten, verwenden Sie UIViews safeAreaLayoutGuide See UIView-Dokumentation .

DEPRECATED ANSWER Wenn Sie iOS 7+ als Ziel verwenden, empfiehlt die Dokumentation für UIViewController, dass Sie mit der topLayoutGuide-Eigenschaft von viewController den unteren Rand der Statusleiste oder den unteren Rand der Navigationsleiste anzeigen, falls dies ebenfalls sichtbar ist. Das kann nützlich sein und ist sicherlich weniger Hack als viele der bisherigen Lösungen.

6

Diese Methode eignet sich für die Ausrichtung im Hoch- und Querformat.

-(float) statusBarHeight
{
    CGSize statusBarSize = [[UIApplication sharedApplication] statusBarFrame].size;
    return MIN(statusBarSize.width, statusBarSize.height);
}

// example call
float statusBarHeight = [self statusBarHeight];
6
David Douglas

Sie können testen, welcher der kleinere der beiden Werte ist, das ist die tatsächliche Höhe.

5
Martin

Swift 2:

let statusBarHeight = UIApplication.sharedApplication().statusBarFrame.height

Swift 3 oder Swift 4:

let statusBarHeight = UIApplication.shared.statusBarFrame.height

Hinweis: Vergessen Sie nicht, den UIApplication.shared zu injizieren.

3
nsmeme

Hier ist die Swift-Version, wenn jemand es braucht:

var screenStatusBarHeight: CGFloat {
    return UIApplication.sharedApplication().statusBarFrame.height
}

Dies ist als Standardvariable enthalten in:

https://github.com/goktugyil/EZSwiftExtensions

Haftungsausschluss: Es ist mein Repo 

0
Esqarrouth