2013-02-13 13 views
5

Ich entwickle eine App mit Auto-Layout ausgeschaltet und Standardeinstellung auf das iPhone 5. Jetzt habe ich eine UIView am unteren Rand des Bildschirms, wenn ich zwischen den Größenoptionen in IB die UIView richtig nach oben bewegt, um sich zu beheben der untere Bildschirmrand. Wenn ich jedoch auf meinem IPhone 4 oder dem Simulator teste, bewegt es sich nicht nach oben, stattdessen wird es abgeschnitten.Wie kann ich eine UIView am unteren Bildschirmrand reparieren?

Wie kann ich es so machen, dass die UIView am unteren Rand der App für das kleinere IPhone 4 nach oben geschoben wird?

Siehe das folgende Beispiel

ich im Grunde das weiße Feld abgeschoben werden soll nach oben, die Lücke unter dem grauen Kasten zu füllen.

aktualisieren

In Bezug auf die Ansichtshierarchie gibt es eine enthält Ansicht und dann wurde der weiße Bereich, den Sie sehen, ist eine einfache UIView (weißer Hintergrund) mit einem Scroll-Blick ins Innere. Das Projekt ist ziemlich neu, daher ist das Setup sehr einfach und es gibt keinen Code zum Positionieren der UIViews.

+0

Verwenden Sie AutoLayout? oder AutoresizingMask? – Jaybit

+0

Ich habe AutoLayout ausgeschaltet, ich benutze die Autosizing-Funktion – ORStudios

+0

@IconicDigital, Ihre 4-Zoll- und 3,5-Zoll-Bilder sind nicht vergleichbar wie ... Siehe meine aktualisierte Antwort – foundry

Antwort

7

um die Y-Koordinate zu erhalten, holen Sie sich die Bildschirmhöhe, subtrahieren Sie alle UI-Elemente oberhalb der Hauptansicht (wie Statusleiste) und subtrahieren Sie die Höhe der UIView, die Sie platzieren. Zum Beispiel:

float y = [UIScreen mainScreen].bounds.size.height - [UIApplication sharedApplication].statusBarFrame.size.height - myView.frame.size.height; 
[myView setFrame:CGRectMake(0, y, myView.frame.size.width, myView.frame.size.height)]; 

Hier ist ein wirklich typisches vollständiges Beispiel ... 2013 ... das funktioniert gut in einem UITableViewController mit einer Navigationsleiste oben, und Sie sind nicht automatisches Layout verwenden.

Position a UIView relative to the bottom of the parent view?

Hoffe, dass es jemand hilft.

2

Mit AutoLayout aus, wo Sie die Ansicht auf dem Bildschirm platzieren, ist ein fester Wert. Um diese automatische Anpassung vornehmen zu können, benötigen Sie etwas Code. Sie müssen autoresizingMask verwenden. Hier ist ein Beispiel für die Verwendung autoresizingMask/

UIView *view = [[UIView alloc] init]; 
[view setAutoresizingMask:UIViewAutoresizingFlexibleTopMargin]; 
3

Sie sollten Ihre Federn und Streben (Autosizing Maske) so etwas wie dieses Set ...

enter image description here

Dann wird die Ansicht es hält Abstand von der Fuß des Bildschirms.

Update

In Ihrem Kommentar, sagen Sie Sie diesen Satz haben richtig noch der Blick noch nach unten gedrückt wird. Die Bilder in Ihrer Frage werden jedoch nicht mit Gleichem verglichen. In der 4-Zoll-Version scheint Ihre Ansicht über den oberen Bildschirmrand gerollt zu sein, was bei der 3,5-Zoll-Version nicht der Fall ist. Ich vermute, darin liegt die Ursache (oder ist das nur b/c Sie mussten Ihren 4-Zoll-Bildschirm scrollen, um das Problem auf dem Bildschirm zu passen?) ... können Sie überprüfen und vielleicht Ihre Frage mit mehr Details über Ihre Ansichtshierarchie aktualisieren.

+0

Hallo, ich habe es so eingerichtet, aber es ignoriert es immer noch. – ORStudios

+0

@IconicDigital - ok dann ist das komisch. Haben Sie irgendeinen Code, der Frame-Parameter in Ansichten festlegt oder andere Einstellungen vornimmt? – foundry

+0

Lustige Sache ist, wenn ich zwischen den Größen in IB umschalte, bewegt es sich gut. Wenn Sie es dann im Simulator testen, wird es abgeschnitten. – ORStudios

1

Der einfachste Weg, dies zu tun ist, wählen Sie Ihre Ansicht, dann gehen Sie zu Editor -> Pin -> Bottom Space zu SuperView. Mit dieser Option wird Ihre Ansicht unabhängig von der Geräteauflösung am unteren Rand der Containeransicht fixiert.

1

Erweitern @ Joel Antwort, für iOS 7 müssen wir nicht die StatusBar Höhe subtrahieren.

float y = [UIScreen mainScreen].bounds.size.height - myView.frame.size.height; 
[myView setFrame:CGRectMake(0, y, myView.frame.size.width, myView.frame.size.height)]; 
Verwandte Themen