Я сделал небольшую демонстрацию, чтобы показать, что происходит в моем приложении. В принципе, я хочу анимировать UIView в левом верхнем углу, который занимает половину ширины экрана, чтобы занять всю ширину и «нажимать» UIView в правом верхнем углу экрана. Затем, в более поздней анимации, я хочу вернуть UIView на экран и изменить размер изображения слева на половину ширины экрана, который начинается.Изменение ширины UIView с Autolayout
Я сделал несколько скриншотов, чтобы продемонстрировать, что происходит с тем, как у меня есть сейчас. Вот как она начинается: Затем после изменения размера вида слева
После попытки вернуть его
А вот код, который изменяет размер взглядов
- (void)replaceWidthConstraintOnView:(UIView *)view withConstant:(float)constant {
[self.view.constraints enumerateObjectsUsingBlock:^(NSLayoutConstraint *constraint, NSUInteger idx, BOOL *stop) {
if ((constraint.firstItem == view) && (constraint.firstAttribute == NSLayoutAttributeWidth)) {
constraint.constant = constant;
}
}];
}
- (IBAction)changeViewSize {
CGFloat blueViewWidth = self.blueView.bounds.size.width;
if (blueViewWidth == self.view.bounds.size.width) {
blueViewWidth = blueViewWidth/2;
[self replaceWidthConstraintOnView:self.blueView withConstant:blueViewWidth];
}
else {
blueViewWidth = blueViewWidth * 2;
[self replaceWidthConstraintOnView:self.blueView withConstant:blueViewWidth];
}
}
Я удивляясь, почему синий вид не возвращается, чтобы покрыть только половину экрана. Я ценю любую помощь!
Вы можете попробовать следующее: После установки новой ширины по constraint.constant = постоянным; insert [containerView layoutIfNeeded]; где containerView - это вид вашего синего экрана. –