2017-03-17 2 views
0

Noch einmal Auto-Layout hat mich am Kopf kratzen. Ich definiere eine UIView und UITextField an der Spitze meiner Klasse:SIGABRT beim Hinzufügen einer Einschränkung zu einer uiview

var urlField = UITextField(frame: .zero) 
var barView = UIView(frame: .zero) 

ich meine Konfigurationsmethode von viewWillAppear nennen (so weiß ich, dass self.view ganz eingestellt):

override func viewWillAppear(_ animated: Bool) { 
       configureURLBar() 
    } 

Und ich m nichts Besonderes zu tun.

func configureURLBar() { 
    barView.translatesAutoresizingMaskIntoConstraints = false 
    barView.topAnchor.constraint(equalTo: self.view.layoutMarginsGuide.topAnchor).isActive = true 
    barView.heightAnchor.constraint(equalToConstant: 30).isActive = true 
    } 

Wenn es zu der TopAnchor-Einschränkung kommt, bekomme ich die Ausnahme, und ich verstehe nicht warum. Wenn ich die 2. und 3. Zeile umkehre, explodiert es nicht, bis es die .topAnchor-Zeile erreicht, also ist das das Problem. Ich kann eine zweite Frage stellen, sobald ich den Grund für diese Ausnahme verstehe (falls Sie sich fragen, was ich versuche): Wie füge ich eine Benutzereingabeleiste (URL) oben in meinem UIWebView hinzu. (Das hat auch nicht geklappt - gleiche Ergebnisse, wenn ich versuche, mich gegen meine self.webView zu beschränken, die perfekt angezeigt wird) Außerdem: Ich rufe self.view.setNeedsDisplay() auf, bevor viewWillAppear() aufgerufen wird.

Antwort

2

Sie haben zu handhaben zuerst Ihre Ansicht zu übergeordneten Ansicht hinzuzufügen. Danach können Sie Einschränkungen hinzufügen.

Versuchen Sie folgendes:

override func viewWillAppear(_ animated: Bool) 
{ 
self.view.addSubview(barView)    
configureURLBar() 
} 
+0

Natürlich! Ich brauche Kaffee, dann schreibe ich eine Checkliste (Schritte) für das automatische Layout. So viele Dinge auf einmal zu verfolgen! Vielen Dank. – Mozahler

0

Fügen Sie Ihre Logik in viewDidLayoutSubviews statt in viewWillAppear ... viewDidLayoutSubviews ein viel besserer Ort ist Geometrie

+0

Es ist immer noch auf der gleichen Linie explodiert. – Mozahler

+0

Was sagt es? – Taher

+0

gerade bemerkt, die Kopfzeile – Taher

Verwandte Themen