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

Анимированные изменения UIView с ограничениями автоматической компоновки

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

enter image description here

Есть два UIView - один, называемый yellowBox, а другой - redBox. Ограничения автоматического макета диктуют, что yellowBox составляет 60 точек от вершины супервизора с 350 точками ведущего и конечного пробелов (т.е. Слева и справа от представления). redBox имеет те же ограничения на ведущее и конечное пространство. Существует ограничение вертикального пространства между двумя полями 0, чтобы указать, что нижняя часть yellowBox должна всегда находиться непосредственно над redBox.

Когда пользователь нажимает кнопку "Развернуть желтую рамку", мне бы хотелось, чтобы высота yellowBox увеличивалась, и, как результат, redBox перемещается вниз, чтобы продолжить выполнение ограничения по вертикальному пространству (что yellowBox всегда находится поверх redBox). Вот код анимации:

- (IBAction)expandYellowBox:(id)sender {

    [UIView animateWithDuration:0.5
                     animations:^{
                         CGRect newFrame = self.yellowBox.frame;
                         newFrame.size.height += 50;
                         self.yellowBox.frame = newFrame;
                     }];

}

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

enter image description here

что достаточно справедливо, так как нет возможности для автоматического макета знать высоту ящиков. Однако я не знаю, как решить эту проблему таким образом, чтобы она позволяла изменять размеры и перемещать ящики. Например, если я укажу ограничение высоты на yellowBox, то это предотвратит его изменение размера. Если я установил ограничение по высоте больше или равно (чтобы высота yellowBox увеличивалась), я получаю другую ошибку ограничения:

enter image description here

Все ограничения были установлены с использованием Xcode в раскадровке - ни один из них не был написан в коде.

Любая помощь очень ценится.


РЕДАКТИРОВАТЬ: Как оказалось, yellowBox растет при нажатии кнопки - это просто я не могу сказать, потому что он появляется за redBox. Я заметил только после четырехкратного щелчка, и он начал появляться в нижней части redBox. Тем не менее, остается тот же вопрос - как заставить redBox всегда придерживаться нижней части yellowBox.

4b9b3361

Ответ 1

Попробуйте, как указано shwet-solanki, но добавьте следующую строку после изменения ограничения:

[self.view layoutIfNeeded];

IBAction будет выглядеть так:

- (IBAction)expandYellowBox:(id)sender {

[UIView animateWithDuration:0.5
                 animations:^{
                     self.yellowBoxHeightConstraint.constant += 50;
                     [self.view layoutIfNeeded];
                 }];
}

Где yellowBoxHeightConstraint - это IBOutlet для ограничения высоты yellowBox. Надеюсь это поможет.

Ответ 2

  • Добавить ограничение по высоте для обоих представлений
  • Создайте IBOutlet для ограничения по высоте желтого блока.
  • Теперь вместо того, чтобы изменять высоту желтой ячейки в нажатой кнопке, скорее измените значение ограничения высоты. Предположим, что ваше имя ограничения IBOutlet - yellowBoxHeightConstraint, затем yellowBoxHeightConstraint.constant += 50;

Надеюсь, это сработает для вас.

Ответ 3

//
//  WPViewController.h
//  AutoLayoutTEst
//
//  Created by VASANTH K on 09/01/14.
//  
//

#import <UIKit/UIKit.h>

@interface WPViewController : UIViewController
@property (strong, nonatomic) IBOutlet UIButton *button1;
- (IBAction)buttClicked:(id)sender;
@property (strong, nonatomic) IBOutlet NSLayoutConstraint *heightConstrain;

@property (strong, nonatomic) IBOutlet UIButton *button2;
@end

нажмите Событие

- (IBAction)buttClicked:(id)sender {


    self.heightConstrain.constant=100;


}

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

https://github.com/vasanth3008/AutoLayoutHeighDemo

ссылайтесь на мой демонстрационный проект