Брат или сестра из анимированного UIView сразу попадают в Финальную позицию
У меня есть 3 UIViews отображаются с помощью AutoLayout.
- UILabel
- UIView для просмотра календаря. Это представление представляет собой пользовательский UIView, содержащий UIView, который, в свою очередь, содержит две кнопки UIB и пару UILabels.
- UiTableView Назначений
Представление 2 имеет ограничение, которое позиционирует свое верхнее равенство снизу вида 1 Представление 3 имеет ограничение, которое позиционирует свое верхнее равен низу вида 2.
Довольно простая вещь, ниже - изображение, показывающее анимацию Constant on View 2's Constraint.
Проблема заключается в том, что View 3 сразу занимает свою окончательную позицию. Почему он не остается в нижней части окна View 2 во время анимации?
Черное пространство - это неокрашенная область, которая будет окончательно заполнена текущим анимационным представлением 2
Я использую Monotouch и код для выполнения анимации
// calendarDateBrowseYConstraint Is View 2
this.calendarDateBrowseYConstraint.Constant = value;
UIView.Animate(
5.25f,
0.0f,
UIViewAnimationOptions.TransitionFlipFromBottom,
() =>
{
this.calendarDateBrowse.LayoutIfNeeded();
},
null);
2 ответа
Убедитесь, что вы называете макет, если LayoutIfNeeded()
на вид контейнера. Вы не упомянули свою иерархию представлений, но я предполагаю, что у вас есть что-то вроде этого:
ViewController:
-view
---myContainerView
------label
------viewWithCalendar
------viewWithTableViewOrTableView
Это правильный путь для вызова вашей анимации (сначала для простой анимации):
this.calendarDateBrowseYConstraint.Constant = value;
UIView.animateWithDuration(durationTime) {
myContainerView.layoutIfNeeded()
}
И Ваши:
this.calendarDateBrowseYConstraint.Constant = value; UIView.Animate(
5.25f,
0.0f,
UIViewAnimationOptions.TransitionFlipFromBottom,
() =>
{
myContainerView.LayoutIfNeeded();
},
null);
Написать LayoutIfNeeded()
в отношении основного вида и убедитесь, что анимация не выполняется в фоновом режиме.