Как получить доступ к данным об ограничениях программно?

-3

Я хотел бы получить доступ к свойству свойства firstAttribute ограниченным образом. так что я могу найти, если ограничение - ограничение по высоте, ограничение ширины, ограничение topMargin и т.д.... когда я пытаюсь,

print(constraint.firstAttribute)

я получаю общий результат как

"NSLayoutAttribute"

но я хочу, чтобы более конкретный результат обрабатывал ограничения по-разному на основе атрибута (высота, ширина, topMargin и т.д.).

  • 3
    Классическая проблема XY здесь. Вы спрашиваете, как сделать то, что, по вашему мнению, решит вашу проблему. Вы должны спросить, как решить проблему. Проблема не в том, что вы хотите найти ограничение в представлении. Проблема в том, что вы хотите обновить ограничение и вам нужен доступ для его обновления.
  • 0
    Возник вопрос - извините, не могу найти его сейчас - что в ответе подробно описано, как искать через ограничения и перечислять их. Но я действительно не думаю, что это правильный способ справиться с этим. (На самом деле, я не думаю, что вы сможете изменить то, что вы найдете таким образом.) (1) Что конкретно вы пытаетесь изменить? (2) Почему вы не пробуете обычный маршрут - либо добавление ограничения в виде @IBOutlet либо объявление ограничения в вашем коде? Существует * большая разница между «нахождением» ограничения и «его изменением».
Показать ещё 5 комментариев
Теги:
constraints

3 ответа

1
Лучший ответ

Свойство ограничения, которое вы ищете, - firstAttribute (или secondAttribute). Тем не менее, действительно нет причин, по которым вам нужно "угадать", какое ограничение вы ищете - просто сохраните ограничения как свойства и назовите их соответствующим образом.

EDIT: чтобы указать, какой тип атрибута у вас есть, переключите его:

switch myConstraint.firstAttribute {
    case .height:
    // height constraint
    case .leading:
    // leading constraint
    case .topMargin:
    // top margin constraint
    // etc
}
  • 0
    он (constraint.firstAttribute) печатает «NSLayoutAttribute». что не помогает :(
  • 0
    тот же результат для второго атрибута тоже.
Показать ещё 4 комментария
0

Для меня firstAttribute не работает вообще, а также, он несовместим с версиями до iOS 9.0

Поэтому я, наконец, решил, назначив идентификатор объекту NSLayoutConstraint. Затем вы можете выполнять итерацию с ограничениями своего представления и сравнивать идентификатор для получения требуемого ограничения.

yourConstraint.identifier = "yourString"

Так:

for tmpConst in self.view.constraints {
        if tmpConst.identifier == "yourString" {
            return tmpConst
        }
}

Вернет ваше ограничение.

0

Решением для этого является сохранение ограничения как свойства. Вы можете сделать это с выходом из раскадровки или наконечника (как кнопка или ярлык) или в коде.

Таким образом, вам не нужно погружаться в представление, чтобы попытаться найти ограничение. Вы просто получаете доступ к нему, как...

buttonHeightConstraint.constant = 50

Так далее...

  • 0
    я имею дело с сотнями ограничений. я не хочу создавать выход для каждого ограничения, которое сделает это чрезвычайно трудным. я добавил все ограничения в коллекцию торговых точек, так что теперь мне просто нужно выяснить, что такое свойство ограничения. т. е. если он ведущий или тянущийся или если его горизонтальное или вертикальное ограничение так что я могу применить математику, используя условные заявления.
  • 0
    @SatishSa, сколько ограничений вы обновляете? Вы обновляете сотни из них? Или только один?
Показать ещё 9 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню