Как анимировать высоту просмотра в UIScrollView, используя autolayout? - PullRequest
0 голосов
/ 19 октября 2018

A UIScrollView содержит три подпредставления: UIView1, UIView2 и UIView3.

enter image description here

Высота UIView1 и UIView3 определяется содержанием этих представлений с использованием ограничений автопоставки.

Высота UIView2 также определяется его подпредставлениями.Однако должна быть возможность переключать видимость UIView2.

При нажатии Button UIView2 должно сворачиваться до высоты 0 (анимация).При повторном нажатии Button необходимо анимировать UIView2 до его первоначальной высоты.

Как это можно сделать (в Objsctiv-C)?

Есливысота UIView2 будет фиксированной, без проблем можно анимировать ограничение высоты от 0 до фиксированного значения (например, 100) или наоборот.Но так как высота не фиксирована, но в зависимости от подпредставлений я не знаю точную высоту UIView2. Как это решить?

Ответы [ 3 ]

0 голосов
/ 19 октября 2018

Простое и простое решение этой проблемы будет содержать ваши UIView1 , UIView2 и UIView3 внутри UIStackView .

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

[UIView animateWithDuration:0.25 animations:^{
    self.secondView.hidden = YES;
}];

Ссылка: Документация UIStackView

0 голосов
/ 19 октября 2018

Создайте два ограничения, одно для высоты, а другое для верхнего пространства, как показано в вашем .h файле

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *view2HeightConstraint;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *view2TopSpaceFromView1;

Создайте действие, как показано ниже, в вашем .m файле

- (IBAction)toggleButtonTapped:(id)sender {
UIButton *btn =  (UIButton *)sender;
if ([btn isSelected])
{
    [btn setSelected:false];
    _view2HeightConstraint.constant = 45.0;
    _view2TopSpaceFromView1.constant = 8.0;

}
else{
    [btn setSelected:true];
    _view2HeightConstraint.constant = 0.0;
    _view2TopSpaceFromView1.constant = 0.0;
}
}
0 голосов
/ 19 октября 2018

Вы можете создать 2 ограничения

1- ограничение высоты View2 = 0 => priority = 999

2- нижнее ограничение SubView3 для View2 => priority = 1000

когда вы хотите скрыть Виды 2, переключите приоритет и анимируйте

...