2012-09-21 2 views
13

Ich bin migrieren meine Apps über und ich benutze eine UIPickerView. In der ViewDidLoad-Methode erstelle ich den Picker und setze seinen Ursprung auf self.view.frame.size.height, so dass er außerhalb des Bildschirms liegt. Dann verschiebe ich es einfach nach Bedarf.UIView Höhe ist nicht richtig auf iPhone 5

Auf dem iPhone 5 self.view.frame.size.height ist immer noch 480 zurück, aber die UIView füllt den Bildschirm richtig.

Ich habe sogar versucht mit zu denken, dass es etwas anderes zurückgeben kann ... keine Würfel. Irgendwelche Ideen, warum dies möglicherweise auftritt.

+2

eine 640x1136 Pixel [email protected] Datei zu Ihrem Projekt hinzufügen. Ohne sie wird Ihre App auf den neuen Geräten nicht in voller Höhe angezeigt. Weitere Informationen [hier] (http://stackoverflow.com/a/12397309/877465). –

+0

Zeigen andere Ansichten Vollbild an? Hast du daran gedacht, deinem Ziel einen iPhone 5-Screenshot hinzuzufügen? –

+0

Ja, ich habe das neue Standardbild dort. Ich habe das Problem gefunden. Meine Feder muss auf "iPhone 5 Vollbild" eingestellt sein (ich glaube, so heißt es). Ich denke, dass es die Ansichtsgröße von der Spitze lädt und autoResizeMask nicht berücksichtigt. – random

Antwort

22

Das ist, weil die Größe, die Sie in der Ansichtsspitze ausgewählt haben, bis viewWillAppear: (BOOL) animated Methode verwendet wird. Dann wird es die richtige Größe annehmen.

CGSize viewSize = [[UIScreen mainScreen] bounds].size; 
viewSize = CGSizeMake(viewSize.width, viewSize.height - STATUS_BAR_HEIGHT); 

STATUS_BAR_HEIGHT ist 20, aber es hängt von Ihrer App:

auch immer Sie den folgenden Code verwenden, um die richtige Größe, da viewDidLoad wird genannt zu haben. Sie müssen diese Zeile möglicherweise hinzufügen oder nicht.

EDIT

Das Problem mit mainScreen Grenzen ist, dass der Rahmen nicht auf Orientierungsänderung ändert. So ist es konzipiert. Sie können sie mit folgendem ausrechnen:

CGSize viewSize = [[UIScreen mainScreen] bounds].size; 

    if(UIInterfaceOrientationIsLandscape(CURRENT_ORIENTATION)){ 
     viewSize = CGSizeMake(viewSize.height, viewSize.width - STATUS_BAR_HEIGHT); 

    } else { 
     viewSize = CGSizeMake(viewSize.width, viewSize.height - STATUS_BAR_HEIGHT); 
    } 

CURRENT_ORIENTATION ist [[UIApplication sharedApplication] statusBarOrientation];

1

Ich habe das Problem gefunden. Meine Feder muss auf "iPhone 5 Vollbild" eingestellt sein (ich glaube, so heißt es). Ich denke, dass es die Ansichtsgröße von der Spitze lädt und autoResizeMask nicht berücksichtigt.

Wenn die Ansichtsgröße in IB auf "Größe: Keine" eingestellt ist, ist die Ansicht nicht richtig formatiert. Es muss auf "Größe: Retina 4 Vollbild" eingestellt werden. Seltsam.

+0

aber wenn Sie das tun und Ihre App auf einem sagen sagen iPhone 4 ausführen, erhalten Sie die falsche Höhe der Ansicht, weil Sie die Höhe eines iPhone 5 sehen. – bllubbor

+0

Ihr Recht :(Antwort von Aspartame war korrekt. – random

18

Ich habe das gleiche Problem behandelt. Ich habe versucht, die Ansichten Rahmen in - (void)viewDidLoad bekommen, aber festgestellt, dass es nicht aktualisiert wird, bis - (void)viewWillAppear:(BOOL)animated aufgerufen wird.

Also versuchen Sie, die Ansichten Rahmen in - (void)viewWillAppear:(BOOL)animated und Sie sollten in Ordnung sein.

+2

Das ist großartig! Allerdings möchte ich die Ansicht nicht jedes Mal ändern, wenn sie erscheint. Sie muss nur geändert werden, sobald die Ansicht geladen ist. Hmm ... da muss eine andere glückliche Mitte sein, die wir finden können (eine andere Methode, p'raps?) –

+0

@ JoeD'Andrea Ich habe das gleiche Problem, ich denke, dass die schnellste Problemumgehung ein isFirstLoad Flag in der viewWillAppear-Methode verwenden – htafoya

+0

@ JoeD'Andrea Sie können auch [[UIScreen mainScreen] Schranken] .size verwenden, das funktioniert – htafoya

Verwandte Themen