У меня есть контроллер представления, выложенный в раскадровке с включенным автозапуском, и я ищу способ изменить ограничения, чтобы позволить моему представлению поворачиваться в альбомные и переставлять кнопки на экране. Когда я пытаюсь выполнить код ниже, я получаю около двух десятков сообщений «неспособных удовлетворить ограничениям, прерываниям ...», которые я не могу действительно декодировать.UIStoryboard как заменить ограничения программно?
Есть ли способ динамически заменить ограничения из раскадровки ограничениями, которые я указываю программно? Я хочу полностью переопределить макет кнопок, которые я определил в раскадровке.
-(void)updateViewConstraints
{
[super updateViewConstraints];
self.loginButton.translatesAutoresizingMaskIntoConstraints = NO;
self.getStartedButton.translatesAutoresizingMaskIntoConstraints = NO;
self.takeTourButton.translatesAutoresizingMaskIntoConstraints = NO;
[self.loginButton removeConstraints:self.loginButton.constraints];
[self.getStartedButton removeConstraints:self.getStartedButton.constraints];
[self.takeTourButton removeConstraints:self.takeTourButton.constraints];
one = self.loginButton;
two = self.getStartedButton;
three = self.takeTourButton;
NSDictionary *metrics = @{@"height":@50.0,@"width":@100.0,@"leftSpacing":@110.0};
NSDictionary *views = NSDictionaryOfVariableBindings(one,two,three);
[self.view removeConstraints:activeTestLabelConstraints];
[activeTestLabelConstraints removeAllObjects];
if(isRotatingToLandscape)
{
[self registerConstraintsWithVisualFormat:@"|-[one(two)]-[two(three)]-[three]-|" options:NSLayoutFormatAlignAllTop | NSLayoutFormatAlignAllBottom metrics:metrics views:views];
[self registerConstraintsWithVisualFormat:@"V:[one(height)]-|" options:0 metrics:metrics views:views];
}else
{
[self registerConstraintsWithVisualFormat:@"|-leftSpacing-[one(width)]" options:0 metrics:metrics views:views];
[self registerConstraintsWithVisualFormat:@"[two(width)]" options:0 metrics:metrics views:views];
[self registerConstraintsWithVisualFormat:@"[three(width)]" options:0 metrics:metrics views:views];
[self registerConstraintsWithVisualFormat:@"V:[one(height)]-[two(75)]-[three(100)]-|" options:NSLayoutFormatAlignAllCenterX metrics:metrics views:views];
}
}
Обновленный с ответом Роба, вот метод, чтобы устранить ограничения, которые я использую
-(void)removeConstraintForView:(UIView*)viewToModify
{
UIView* temp = viewToModify;
[temp removeFromSuperview];
[self.view addSubview:temp];
}
Спасибо, это сработало! –
Я заметил, что удаление subview из супервизора, похоже, не работает для ограничений, определенных для этого поднабора (например, приподнятой высоты и ширины). –
Вторая часть моего ответа удалит ограничения ширины и высоты. –