Autolayout — добавление и запуск ограничения

У меня есть представление с двумя представлениями контейнера: одно основное сверху и одно снизу.

Когда приложение запускается, нижняя скрыта рамкой, выходящей за пределы экрана. Тем временем верхний занимает все окно приложения.

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

Я попытался добавить ограничение программно и использовал layoutIfNeeded, но ничего не получилось.

Я новичок в этом. Мне не обязательно нужен лучший ответ, но как я должен подходить к этому.

Спасибо!!!!

-(void)showBottom {
    NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:self.bottomContainer attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.mainContainer attribute:NSLayoutAttributeTop multiplier:1.0f constant:49.0f];
    [self.view addConstraint:constraint];
}

person user1732055    schedule 18.01.2014    source источник
comment
Покажите, как вы добавляете ограничение   -  person danielbeard    schedule 18.01.2014
comment
Поэтому я хочу вызвать этот метод и применить ограничение. Не уверен, как я это делаю. Этот метод находится внутри контроллера, представление которого содержит 2 контейнера.   -  person user1732055    schedule 18.01.2014


Ответы (1)


Вы можете попробовать закрепить объекты с ограничением Top Space to Superview и анимировать их.

// .h
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *topConstraint;

// .m
[UIView animateWithDuration:1.0 animations:^{
    self.topConstraint.constant = 0;
    [self.nView layoutIfNeeded];
}];
person Matt    schedule 18.01.2014
comment
Нужна ли для этого анимация? Разве я не могу просто сделать то, что сделал выше, а затем вызвать layoutIfNeeded? - person user1732055; 18.01.2014
comment
Вы можете, но это просто появится внезапно. - person uchuugaka; 18.01.2014
comment
Спасибо. До сих пор с этим беда. Будет держать в этом - person user1732055; 18.01.2014
comment
На самом деле я пробовал что-то еще, где я переназначаю кадр. Кажется, это работает. Теперь моя проблема в том, что представление таблицы из контроллера, встроенного в основной контейнер, обрезается и не настраивается. Придется разбираться с этим. - person user1732055; 18.01.2014
comment
Нашел способ, добавив ограничение через раскадровку в виде таблицы и в нижней части представления. - person user1732055; 18.01.2014