2017-11-16 3 views
1

Ich habe eine App, wo manchmal Ansichten in Navigations-Controller sind, manchmal nicht, und manchmal in einer Tab-Leiste und Navigation Controller.Instanziieren des Ansichtsrahmens, damit er mit der Navigationsleiste/Tableiste übereinstimmt?

erstelle ich meine Ansichten programmatisch Code wie folgt aus:

let contact = ContactFormViewController(contactFormView: ContactFormView.init(frame: UIScreen.main.bounds)) 

aber dies verursacht Frames immer wie der Bildschirm so groß sein, was bedeutet, wenn eine Navigationsleiste oder Tab-Leiste ist der Ansicht gedrückt wird aus dem sichtbaren Bildschirm und passt nicht.

Gibt es eine Methode, um die Ansichtshöhe so anzupassen, dass sie immer auf dem Bildschirm angezeigt wird, unabhängig von übergeordneten Elementen wie der Navigationsleiste oder der Tableiste? oder wäre es ein Fall von immer Erstellen von Ansichten mit manuellen Subtraktionen so sein, die schlecht scheinen, als sie fest codierte Elemente übernehmen muss:

let attendees = AttendeesViewController(attendeesView: AttendeesView.init(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height-55))) 

Dank für jede Führung als ein wichtiges Thema in meinem app

+0

Apple vorgeschriebene Art und Weise abzubilden Layout zu tun Auto-Layout genannt wird. Dies ist in Kombination mit Größenklassen, Merkmalssammlungen und dynamischen Schriftgrößen eine Gruppe namens adaptives Layout. Keiner von diesen verwendet Frames - und es funktioniert in allen Größen von iOS-Geräten. – dfd

+0

Ich weiß, wie Auto-Layout funktioniert, aber Sie können das nicht tun, wenn Objekte initiieren ... Sie müssen einen Rahmen für eine manuelle Initialisierung einer Ansicht Controller-Ansicht definieren – jackdm

+0

Verwenden Sie einfach 'CGRect.zero', wenn gezwungen, einen Rahmen zu verwenden. Das ist, was ich tue. (EDIT: Ich habe deine Antwort gesehen. Schön, dass du das gefunden hast!) – dfd

Antwort

2

Die Lösung war, den Rahmen zu CGRect.zero und dann in der Init-Methode des Controllers zu setzen, Layoutbeschränkungen in die Ansichtsklasse es auf self.view

1

Ich denke, es ist falsch, UIScreen als Referenz für die Gestaltung Ihrer Ansichten zu verwenden. Ich denke, dass Sie die Inhaltsansicht (die Ansicht an der Spitze Ihrer Hierarchie) als Referenz verwenden sollten.

+0

danke gibt es eine Syntax dafür? – jackdm

+0

Im Allgemeinen können Sie es mit self.view.frame aufrufen. Es hängt davon ab, ob Sie sich in einem View-Controller oder etwas anderem befinden. – Arrabidas92

Verwandte Themen