Я хотел бы получить доступ к свойству свойства firstAttribute ограниченным образом. так что я могу найти, если ограничение - ограничение по высоте, ограничение ширины, ограничение topMargin и т.д.... когда я пытаюсь,
print(constraint.firstAttribute)
я получаю общий результат как
"NSLayoutAttribute"
но я хочу, чтобы более конкретный результат обрабатывал ограничения по-разному на основе атрибута (высота, ширина, topMargin и т.д.).
Свойство ограничения, которое вы ищете, - firstAttribute
(или secondAttribute
). Тем не менее, действительно нет причин, по которым вам нужно "угадать", какое ограничение вы ищете - просто сохраните ограничения как свойства и назовите их соответствующим образом.
EDIT: чтобы указать, какой тип атрибута у вас есть, переключите его:
switch myConstraint.firstAttribute {
case .height:
// height constraint
case .leading:
// leading constraint
case .topMargin:
// top margin constraint
// etc
}
Для меня firstAttribute не работает вообще, а также, он несовместим с версиями до iOS 9.0
Поэтому я, наконец, решил, назначив идентификатор объекту NSLayoutConstraint. Затем вы можете выполнять итерацию с ограничениями своего представления и сравнивать идентификатор для получения требуемого ограничения.
yourConstraint.identifier = "yourString"
Так:
for tmpConst in self.view.constraints {
if tmpConst.identifier == "yourString" {
return tmpConst
}
}
Вернет ваше ограничение.
Решением для этого является сохранение ограничения как свойства. Вы можете сделать это с выходом из раскадровки или наконечника (как кнопка или ярлык) или в коде.
Таким образом, вам не нужно погружаться в представление, чтобы попытаться найти ограничение. Вы просто получаете доступ к нему, как...
buttonHeightConstraint.constant = 50
Так далее...
@IBOutlet
либо объявление ограничения в вашем коде? Существует * большая разница между «нахождением» ограничения и «его изменением».