Подтвердить что ты не робот

Как получить ограничения автоопределения, влияющие на данный подвью?

Насколько я обожаю autolayout как концепцию, я, кажется, постоянно спотыкаюсь о деталях реализации. Одним из них является то, что я действительно устал хранить ограничения, применяемые к данному подзону, поэтому я могу их удалить и заменить позже.

Например, когда я впервые добавляю представление, я мог бы дать ему ограничение:

@"H:[view(==200)]|"

Разложите его на правую сторону экрана шириной 200. Что, если я позже захочу сделать его шириной 400 с шириной 200? Новый макет достаточно прост, но прямо противоречит старой:

@"H:[view(==200)]-(200)]|"

Итак, я должен хранить массивы ограничений, поэтому я могу позже использовать их для удаления указанных ограничений. Там должно быть более простое решение, которое мне где-то не хватает. К сожалению, очевидное решение [ограничений просмотра] не имеет смысла, потому что вы не применяете ограничения непосредственно к данному виду, вы применяете их к нему viewview. (Кроме того, он, как правило, заполняется ограничениями автоопределения, которые делают его собственные объекты подходящими - не то, что вы хотите удалить, только чтобы отрегулировать его положение!) И, похоже, не существует опции [view constraintsForSubview:].

Я слепой? Что-то пропало? Мне действительно нужно обмениваться словарями существующих ограничений, чтобы я мог их исправить позже?

4b9b3361

Ответ 1

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

self.widthCon.constant = 400;

Это приведет к ограничению с правой стороны в 200 (вы можете сделать выход к этому тоже, если вы хотите изменить его).

Если вы хотите сохранить (или удалить) ограничение для определенного вида, вы можете использовать метод, подобный этому:

for (NSLayoutConstraint *con in self.view.constraints) {
        if (con.firstItem == self.leftButton || con.secondItem == self.leftButton) {
            [self.portraitConstraints addObject:con];
        }
    }

Конечно, вы можете создать категорию в UIView, которая будет использовать что-то подобное для создания метода viewConstraintsForView: