UIViewController меняет размер после модального представления - PullRequest
0 голосов
/ 13 июня 2019

У меня есть UIViewController, который представлен с помощью пользовательского перехода, и по дизайну он заполняет только 90% высоты экрана.

Это выглядит нормально, и у меня никогда не было с этим проблем. Давайте назовем это View A. Теперь я пытаюсь представить полноэкранное модальное представление поверх этого, давайте назовем это View B. Этот вид работает, но когда View B отклоняется, View A появляется снова, но был расширен, чтобы заполнить целые границы экрана.

Вот код презентации, который я использую:

- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext
{
    ...
    // Presentation
    const CGFloat viewHeight = (screenBounds.size.height * 0.9);
    const CGRect beginFrame = CGRectMake(0, screenBounds.size.height, screenBounds.size.width, viewHeight);
    const CGRect finalFrame = CGRectMake(0, (screenBounds.size.height - viewHeight), screenBounds.size.width, viewHeight);

    // Dim
    self.dimmedView.alpha = 0.0;
    [transitionContext.containerView addSubview:self.dimmedView];
    [transitionContext.containerView addConstraints:[NSLayoutConstraint allConstraintsFromViewToSuperview:self.dimmedView inset:UIOffsetZero]];

    // Prepare
    UIView * const toView = toVC.view;
    toView.frame = beginFrame;
    [transitionContext.containerView addSubview:toView];

    // Animate
    [UIView animateWithDuration:kAnimationDuration delay:0.0 usingSpringWithDamping:0.8 initialSpringVelocity:0.25 options:0 animations:^{
        toView.frame = finalFrame;

        self.dimmedView.alpha = 0.6;

        self.tabBarController.view.layer.cornerRadius = 8.0;
        self.tabBarController.view.transform = CGAffineTransformMakeScale(0.95, 0.95);
    } completion:^(BOOL finished) {
        [transitionContext completeTransition:!transitionContext.transitionWasCancelled];
        [offshootView removeFromSuperview];
    }];
    ...
}

Кто-нибудь видел это раньше и знает, как остановить изменение размера представления A в системе?

1 Ответ

0 голосов
/ 14 июня 2019

Мне кажется, проблема в том, что вы изменяете размер корневого представления контроллера представления, хотя оно обрабатывается контроллером представления. Документация для UIViewController гласит:

Корневое представление контроллера представления всегда соответствует его назначенному пространство.

Почему бы не добавить еще одно (полностью прозрачное) представление в качестве дочернего в корневое представление, куда вы помещаете весь свой контент? Делая так, вы сохраните корневое представление на 100%, при этом изменив размер нового представления на 90%, когда захотите. Если я вас правильно понимаю, это будет происходить так же, не касаясь корневого представления.

Чтобы это работало, вы должны установить свойство Presentation контроллеров представления в инспекторе атрибутов раскадровки на Over Full Screen. Если вы хотите установить его по коду, вы установите контроллер вида .modalPresentationStyle = UIModalPresentationOverFullScreen. Установив этот параметр, базовый контроллер представления будет оставаться на экране после того, как вы представите свой контроллер представления, и по-прежнему будет отображаться там, где у вас есть прозрачность в вашем представлении.

Документация для UIViewController

Документация для UIModalПрезентация OverFullScreen

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...