Richtige Art und Weise zu verstecken Statusleiste auf iOS, mit animation und ändern der Größe root anzeigen
Betrachten eines view-controller muss slide-out (oder aus) blenden Sie die Statusleiste, wenn eine Schaltfläche geklickt wird.
- (void) buttonClick:(id)sender
{
[[UIApplication sharedApplication] setStatusBarHidden:YES
withAnimation:UIStatusBarAnimationSlide];
}
Den oben effektiv verbirgt die Statusleiste, aber nicht die Größe der root-Ansicht entsprechend, so dass eine 20 pixel Abstand an der Spitze.
Was ich erwartet habe ist der root-Ansicht erweitern über den Raum, die zuvor verwendet wurde, indem die status-bar (animiert, mit der gleichen Dauer als der status bar animation).
Was ist der richtige Weg, dies zu tun?
(Ich bin mir bewusst, es gibt viele ähnliche Fragen, aber ich konnte nicht finden alle über das ausblenden der Statusleiste auf Nachfrage gegenüber, die Sie versteckt anzeigen, um eine neue view-controller)
Der "brute-force" - Ansatz
Offensichtlich, die folgenden Werke...
[[UIApplication sharedApplication] setStatusBarHidden:YES
withAnimation:UIStatusBarAnimationSlide];
[UIView animateWithDuration:0.25 animations:^{
CGRect frame = self.view.frame;
frame.origin.y -= 20;
frame.size.height += 20;
self.view.frame = frame;
}];
...hat aber Nachteile:
- Hardcodes die Dauer der slide-animation
- Hardcodes die Höhe der Statusleiste
- Der stammansicht Ursprung bleibt auf (0,-20). Ich mag meine frames zu beginnen bei (0,0), wenn möglich.
Was ich schon versucht
- Dass die autoresize-Maske der root-Ansicht hat
UIViewAutoresizingFlexibleTopMargin
undUIViewAutoresizingFlexibleHeight
. - Genannt
[self.view setNeedsLayout]
nach ausblenden der Statusleiste. - Genannt
[self.view setNeedsDisplay]
nach ausblenden der Statusleiste. - Set
wantsFullScreenLayout
zuYES
vor und nach dem ausblenden der Statusleiste.
InformationsquelleAutor der Frage hpique | 2012-11-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies funktioniert problemlos, und hat nichts hart codiert.
InformationsquelleAutor der Antwort Lefteris
Für diejenigen, die versuchen dies zu realisieren ist mit view controller-based status bar appearance, die Sie implementieren müssen, um die prefersStatusBarHidden Methode im view-controller
Und dann im button-click-Methode:
Um die animation Stil, verwenden Sie diese:
Und anpassen der Stil:
InformationsquelleAutor der Antwort awfulcode
Können Sie präsentieren und dann entlassen modal-view-controller ausblenden, Statusleiste korrekt
Ich habe diesen code in der "willAnimateRotationToInterfaceOrientation" - Methode zum Querformat, und alles richtig funktioniert. Aber ich weiß nicht, ob es funktioniert mit der animation.
InformationsquelleAutor der Antwort Exception
Ein-oder ausblenden der Statusleiste, dass auch re-Größen die Ansicht:
call-Methode(Nachricht):
InformationsquelleAutor der Antwort Shams Ahmed
Ich weiß, einen Spaziergang um den Weg für diese aber der Nachteil liegt auch auf der Hand. Sie können
self.wantsFullScreenLayout = YES;
in IhremviewDidLoad
und stellen Sie Ihre xib-Datei so groß wie der Bildschirm(320x480, und 320x568 für iPhone5). Das aber bedeutet, dass die Fläche unter der Statusleiste ist auch nicht sichtbar. Und mit dieser Art Ihrer Ansicht auch nicht erweitern, wenn Sie hide the status bar. Betrachten Sie diese, wenn Sie Sie nicht haben, etwas für die Anzeige in der status-bar-Bereich.InformationsquelleAutor der Antwort sunkehappy
Nach endlosen Stunden des Experimentieren und der Suche nach Antworten; besonders diese Antwort. Mit ein bisschen tweaking, ich habe erfolgreich machen, nun die top-Lücke 20px Weg ist zwischen übergang!
Nehmen wir an, wir haben eine BOOL
isStatusBarEnabled
ivar, die angeben, ob wir sollten Statusleiste ausgeblendet ist oder nicht, (zB: beim Zugriff aufNSUserDefault
für die überprüfungboolValueForKey
).So, wir zunächst prüfen, ob statusBar ist bereits ausgeblendet sind oder nicht über
[[UIApplication sharedApplication] isStatusBarHidden]
wenn es nicht versteckt ist (== wird angezeigt), wir verstecken! Sonst, sonst zu tun!Fix 20px wenn status angezeigt, aber die navigation ist nicht richtig nach unten gedrückt haben, fügen Sie nur 20 Punkt zu
origin.y
vonself.navgigationController.navigationBar.frame
.Dasselbe tun, wenn wir wollen, Statusleiste ausblenden, entfernen Sie einfach das 20 Punkt zu
origin.y
vonself.navgigationController.navigationBar.frame
also lass es einfach0
.das ist es!
... dann, in meinem Fall habe ich die einstellen-Taste, damit Benutzer wählen Sie " toggle show/hide status bar.
das ist es!
InformationsquelleAutor der Antwort Vinh Nguyen
Für die Bequemlichkeit, ein Swift 4-Variante von @awfulcode Antwort:
InformationsquelleAutor der Antwort pinch