2016-06-01 9 views
0

ich im folgenden Beitrag zu prüfen, um zu verstehen, wie das bekommen y-Koordinate des unteren Randes einer Ansicht: How get bottom y coordinateWie bekomme ich den unteren Rand der Ansicht?

Er sagt, ich kann dies tun: exampleView.frame.maxY

Allerdings, wenn ich dies tun ich bekomme 0. Hier ist mein Beispiel:

override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     let thankYouMessage = UILabel() 
     self.view.addSubview(thankYouMessage) 

     thankYouMessage.text = "Thank You for Installing the Keyboard" 
     thankYouMessage.textAlignment = .Center 

     thankYouMessage.snp_makeConstraints { (make) -> Void in 
      make.right.left.top.equalTo(self.view) 
      make.height.equalTo(self.view.frame.height * 0.2) 
     } 

     print(thankYouMessage.frame.maxY) 

     let enableMessage = UILabel() 
     self.view.addSubview(enableMessage) 
     enableMessage.text = "Enable the keyboard here:" 
     enableMessage.textAlignment = .Center 
     enableMessage.backgroundColor = UIColor.blackColor() 

     enableMessage.snp_makeConstraints { (make) -> Void in 
      make.left.equalTo(self.view) 
      make.top.equalTo(self.view).offset(50) 
      make.width.equalTo(self.view.frame.width * 0.3) 
      make.height.equalTo(self.view.frame.height * 0.1) 
     } 




    } 

Die print(thankYouMessage.frame.maxY) 0 zurück

ich bin nicht sicher, warum das so ist. Gibt es eine Art Initialisierungsprozess, den ich für die erste Ansicht ausführen muss?

+0

Haben Sie die zweite Antwort in dieser Frage versucht? –

Antwort

1

Der Rahmen der Ansicht wird basierend auf seinen Einschränkungen und/oder seiner inhaltlichen Größe nicht aktualisiert, bis der Layout-Durchlauf ausgeführt wurde. Die früheste Möglichkeit, den Bildschirmrahmen der Ansicht im View-Controller anzuzeigen, ist die viewDidLayoutSubviews-Methode.

Sie könnten layoutIfNeeded oder sizeToFit auf der Ansicht aufrufen, bevor für seinen Rahmen zu fragen, aber je nach Situation die falsche Antwort jene könnte noch geben in viewDidLoad wenn genannt enden.

+0

Also würde ich alle meine benutzerdefinierten Constraint-Code in der 'ViewDidLayoutSubViews' Methode? – Roymunson

+0

Nein, richten Sie Ihre Einschränkungen anders ein. Sie beschränken Attribute auf Konstanten (z. B. 'self.view.size.height * 0.2 'ist die aktuelle Größe ** der Ansicht, die dann als Konstante behandelt wird). Stattdessen sollten Sie Attribute auf Attribute beschränken. Beispiel: 'thankYouMessage.heightAnchor.constraintEqualToAnchor (view.heightAnchor, Multiplikator: 0.2) .active = true' –

0

Es passiert, weil Sie Ihre Beschriftung mit Null-Frame erstellt und Ihre Ansicht nicht in der ViewDidLoad-Methode in der Hierarchie im Fenster hinzugefügt. Die Dokumentation sagt, dass in ViewDidLoad Ansicht nur in den Speicher geladen wurde. Und in ViewWillAppear wurde es zur Hierarchie im Fenster hinzugefügt. Setzen Sie Ihren Druck auf viewWillAppear für überprüfen Sie es oder erstellt UILabel() mit Rahmen

Verwandte Themen