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

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

Например, если у меня есть подвиды a и b, разнесенные на 10 пунктов, вот так:

[а]-10-[б]

а затем добавьте представление c, представления в subviews теперь должны автоматически размещаться следующим образом:

[а]-10-[б]-10-[в]

Если, однако, я сейчас удалю вид b, разрыв между a и c должен снова стать равным 10 точкам:

[а]-10-[в]

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


person SaldaVonSchwartz    schedule 13.05.2013    source источник


Ответы (1)


Убедитесь, что ваш код, который вычисляет ограничения на основе текущих подпредставлений, находится в updateConstraints:

- (void)updateConstraints {
    [super updateConstraints];
    // Put your code here
}

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

person Mike Pollard    schedule 13.05.2013
comment
UIView есть хуки, которые вы можете использовать, чтобы заметить это автоматически: didAddSubview: & willRemoveSubview: - person Benjohn; 30.10.2015