2017-04-12 3 views
1

Ich bin neu beim Erstellen von Ansichten ohne Interface Builder. Ich verwende NSLayoutAnchors, um Ansichten zu erstellen!klare Einschränkungen bei der Verwendung von NSLayoutAnchor

wenn ich verwende einige Ansicht, die in Viewcontroller wie folgt erstellt:

let borderView:UIView = { 

    let view = UIView() 
    view.translatesAutoresizingMaskIntoConstraints = false 
    view.backgroundColor = UIColor.lightGray 
    view.isUserInteractionEnabled = false 
    view.alpha = 0.5 
    return view 

}() 

dann verwende ich diese Ansicht Grenze etw in Aussicht wie folgt aus:

view.addSubview(borderView) 
borderView.bottomAnchor.constraint(equalTo: headerView.bottomAnchor).isActive = true 
borderView.leftAnchor.constraint(equalTo: headerView.leftAnchor).isActive = true 
borderView.rightAnchor.constraint(equalTo: headerView.rightAnchor).isActive = true 
borderView.heightAnchor.constraint(equalToConstant: 1).isActive = true 

dann in einer anderen Ansicht i versuchen Sie das:

informationView.addSubview(borderView) 

    borderView.topAnchor.constraint(equalTo: informationView.topAnchor).isActive = true 
    borderView.leftAnchor.constraint(equalTo: informationView.leftAnchor).isActive = true 
    borderView.rightAnchor.constraint(equalTo: informationView.rightAnchor).isActive = true 
    borderView.heightAnchor.constraint(equalToConstant: 1).isActive = true 

aber sieht aus wie diese Ansicht hat seine früheren Einschränkungen Ende zeigen Einschränkungen Error !

Wie kann ich borderView Einschränkungen vor der Wiederverwendung entfernen?

+0

Mögliche Duplikat [alle Einschränkungen Entfernen eines UIView zu beeinflussen] entfernen (http://stackoverflow.com/questions/24418884/remove-all-constraints -aeffecting-a-uiview) – dirtydanee

+0

Es ist nicht wirklich ein Duplikat, weil die Antwort nicht darin besteht, die Ansicht wiederzuverwenden (das Entfernen von Beschränkungen würde in diesem Fall nicht helfen). –

Antwort

1

Sie können Ansichten nicht erneut verwenden. Jede Ansicht kann nur einmal in der Ansichtshierarchie angezeigt werden. Sie müssen ein neues umrandetes Ansichtsobjekt für jede Ansicht erstellen, mit der Sie es verwenden möchten.

die Frage zu beantworten, Sie Einschränkungen aus einer Ansicht mit view.removeConstraints(view.constraints)

+0

Was ist eine Best Practice, um eine Randansicht mit dieser Methode zu erstellen? – shaibow

+0

So etwas wie: (1) habe keine Eigenschaft für sie (2) mache ein Func, das eine Ansicht macht, eine neue Randansicht erstellt, Beschränkungen festlegt und sie als Sub-Objekt zu der übergebenen Ansicht hinzufügt, also tust du es einfach 'addBorderView (zu: view)' –

+0

perfekt, das war eine große Hilfe, danke <3 – shaibow

Verwandte Themen