Ich habe eine Multiview-Anwendung erstellt, die mehrere Controller zum Anzeigen und Steuern von Ansichten verwendet. Das Problem besteht darin, dass, wenn der Simulator die Ansicht anfänglich lädt, die Kopfzeile teilweise von der Leiste am oberen Bildschirmrand bedeckt ist und die Werkzeugleiste an der Basis die Basis des Bildschirms nicht berührt. Ich habe die Größenattribute des Builders Interface verwendet, um die Ansicht zu steuern, wenn das iPhone rotiert und es perfekt funktioniert. Alles fügt sich perfekt in den Quer- und Hochformat-Modus nach einer Drehung, aber das Problem ist mit der anfänglichen Belastung, bevor eine Rotation auftritt. Ihre Gedanken werden sehr geschätzt. TonyUIView Abgeschnitten von Statusleiste bis Autorotate
Antwort
Ich hatte Probleme mit Ansichten, die durch Status-, Navigations- und Tab-Balken abgeschnitten wurden. Die meisten davon habe ich mithilfe der Funktion "Simulierte Metriken" im Interface Builder behoben. Auf diese Weise ist das, was du in IB auslegst viel genauer, was du tatsächlich bekommst.
Ich habe mich tagelang mit diesem Problem herumgeschlagen - keine Menge an Fiddling in IB hat funktioniert.
Letztendlich habe ich es durch das Hinzufügen dieser Zeile zu arbeiten:
mainViewController.view.frame = window.screen.applicationFrame;
zur Anwendung: didFinishLaunchingWithOptions: Methode. (Wo mainViewController der primäre UIViewController ist).
Das Problem ist, dass Sie das Hinzufügen des Controllers „falsch“ laut Apple docs (obwohl IMHO von Apple es schlecht konzipiert - der Standard sein sollte, dass Sie müssen nicht verschieben)
wenn Sie werden eine Statusleiste haben, Apple erfordert, dass Sie "manuell" alle Ihre Controller um 20 Pixel nach unten (genauer gesagt, um die Höhe der Statusleiste - obwohl das ist immer 20 Pixel heute, Apple lässt Sie die Anfrage Höhe zur Laufzeit, von der "statusBarFrame" -Eigenschaft in UIApplication)
Apples Klassen - z UINavigationController/UITabBarController - verschiebt sich automatisch um 20 Pixel, wenn sie dem Bildschirm hinzugefügt werden. Beide Klassen haben einen Fehler, wo sie diese Verschiebung machen, auch wenn sie nicht die Hauptsteuerung sind - so schaltet Ihre App plötzlich um zusätzliche 20 Pixel herunter und hinterlässt 20 Pixel Leerraum oben.
Aber wenn sie sich drehen, "lernen" diese Klassen oft "richtig" und bewegen sich wieder zurück. Oder umgekehrt.
c.f. Link für eine viel genauere Erklärung dessen, was los ist, und wie Sie Ihren Code, um die Art und Weise Apple will, schreiben Sie an:
ich auch in dieser Ausgabe lief. Genauer gesagt würde sich bei der Anzeige einer ADBannerView
meine gesamte Ansicht verschieben und unter der Statusleiste sein und einen kleinen leeren Platz hinterlassen, der nur der Größe der Statusleiste am unteren Rand des iPhone-Bildschirms entspricht. Hier ist, wie ich es gelöst: (Adams Antwort hier half ich diese heraus):
// In the function that displays an iAD Banner
CGRect contentFrame = self.view.bounds;
CGRect myStatusBarFrame = [[UIApplication sharedApplication] statusBarFrame];
CGFloat statusHeight = myStatusBarFrame.size.height;
// Set the view's origin to be under the status bar.
contentFrame.origin.y = statusHeight;
Ich brauchte den Ursprung meiner Ansicht setzen unter der Statusleiste zu sein, und dass das Problem für mich gelöst.
Danke! Ich habe mit diesem Problem gekämpft, nachdem ich meinen Hauptansicht-Controller manuell erstellt habe.Ein Element im Controller (ein Popup-Fenster für die Anzeigenanzeige) führte dazu, dass die untergeordneten Elemente in der Ansicht nach dem Schließen der Anzeige um die Höhe der Statusleiste verschoben wurden. – DPlusV
+1, weil ich zwei Stunden verschwendete, um diese Antwort zu finden! –
hatte das gleiche Problem, das funktionierte für mich. –