Брат или сестра из анимированного UIView сразу попадают в Финальную позицию

У меня есть 3 UIViews отображаются с помощью AutoLayout.

  1. UILabel
  2. UIView для просмотра календаря. Это представление представляет собой пользовательский UIView, содержащий UIView, который, в свою очередь, содержит две кнопки UIB и пару UILabels.
  3. 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() в отношении основного вида и убедитесь, что анимация не выполняется в фоновом режиме.

Другие вопросы по тегам