Sie können versuchen diese. Ich habe es noch nicht versucht. Als erstes brauchst du einen Bündel von Filtern gefiltert oder alle, um durchzuschlüpfen und den benötigten zu finden. Dafür können Sie das verwenden.
var constraint: NSLayoutConstraint! = nil
let constraints = myButton.constraintsAffectingLayoutForAxis(UILayoutConstraintAxis.Horizontal)
oder dies wird alle Ihre Einschränkungen bekommen.
var constraint: NSLayoutConstraint! = nil
Dann müssen Sie durchlaufen sie und finden Sie die erforderliche wie folgt.
for const in myButton.constraints {
if const.firstAttribute == NSLayoutAttribute.Width {
constraint = const
break
}
}
erste Attribut der Breite Einschränkung setzt immer als „Breite“ und auch können Sie für den Artikel wie unten zusätzliche Prüfung setzen, auf dem die Einschränkung mit dem if-Klausel
const.firstItem as! NSObject == myButton
weil erste Element angewendet wird der Breitenbeschränkung ist es selbst. versuchen, wenn funktioniert. Und wenn Sie es finden, schlage ich vor, die spezifische Einschränkung zu entfernen und neue hinzuzufügen. Um die Einschränkung der Breite für ein Objekt hinzuzufügen, wird der Code verwendet. Angenommen, die gewünschte Breite beträgt 50 px.
myButton.addConstraint(NSLayoutConstraint(item: myButton, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1.0, constant: 50.0))
Dies ist der richtige Ansatz. Aktivieren oder deaktivieren Sie es nicht.
Warum haben Sie keinen Hinweis auf die alte Breitenbeschränkung? Standardmäßig wird die Breite einer Schaltfläche ihren Inhalt umrahmen, sodass Sie vielleicht gar keine Breitenbeschränkung benötigen. Stellen Sie die horizontale Mitte und vielleicht eine maximale Breite – Paulw11
Ich versuche, eine generische Methode zu schreiben, die einen Parameter, in diesem Fall eine UIButton, zurückdrängt. Wäre nett, nach allen Beschränkungen für einen Anker zu fragen. – andrewz