Просмотр заблокирован UITransitionView после представления

У меня есть боковой навигационный контроллер и передайте его через UIButton. Когда я делаю этот NC контроллером корневого представления напрямую с помощью [self presentviewcontroller: NC animated: YES completion: nil], по какой-то причине сторона меню NC заблокирована UITransitionView, которую я не могу исчезнуть.

Я прикрепил образ иерархия представлений. Здесь является другим.

Я пробовал следующее:

UIWindow *window = [(AppDelegate *)[[UIApplication sharedApplication] delegate] window];
    window.backgroundColor = kmain;


    CATransition* transition = [CATransition animation];
    transition.duration = .5;
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionPush;
    transition.subtype = kCATransitionFromTop;

    [nc.view.layer addAnimation:transition forKey:kCATransition];

    [UIView transitionWithView:window
                      duration:0.5
                       options:UIViewAnimationOptionTransitionNone
                    animations:^{ window.rootViewController = nc; }
                    completion:^(BOOL finished) {
                        for (UIView *subview in window.subviews) {
                            if ([subview isKindOfClass:NSClassFromString(@"UITransitionView")]) {
                                [subview removeFromSuperview];
                            }
                        }
                    }];

Но он очень взломан, и поскольку rootviewcontroller окна изменяется во время перехода, он немного изменчив, а часть навигационного контроллера и верхний правый угол становятся черными. Это выглядит очень плохо.

Ответ 1

Чтобы получить события крана через UITransitionView, установите для параметра containerView userInteractionEnabled значение false. Это если вы делаете настраиваемую анимацию перехода, используя UIViewControllerAnimatedTransitioning.

Пример, в animateTransition(_:):

func animateTransition(transitionContext: UIViewControllerContextTransitioning) {

    let containerView = transitionContext.containerView()        
    containerView.userInteractionEnabled = false

    ...
}

Ответ 2

У меня была такая же проблема, но в немного другом сценарии, я в итоге сделал что-то очень похожее, чтобы найти представление, но вместо того, чтобы удалить представление, которое может быть более проблематичным, я отключил взаимодействие с пользователем, поэтому любые события касания просто бросают его и любые другие объекты могут взаимодействовать с пользователем. В моем случае это было только после обновления приложения до iOS 10, тот же код, запущенный в iOS 9, не попадал в это.

Ответ 3

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

navigationController.setNavigationBarHidden(true, animated: false)

Это сработало для меня, поскольку у меня есть пользовательский вид в качестве навигационной панели в виде контроллеров.

Ответ 4

У меня возникла эта проблема, когда я устанавливал accessibilityElements на контроллере просмотра popover. Я исправлю это, удалив назначение массива элементов.

Ответ 5

У меня была похожая проблема, когда UITransitionView продолжал блокировать мои представления, предотвращая любое взаимодействие с пользователем.

В моем случае это произошло из-за незавершенного пользовательского анимированного перехода UIViewController.

Я забыл правильно завершить переход с помощью:

TransitionContext.completeTransition(transitionContext.transitionWasCancelled)

или

TransitionContext.completeTransition(!transitionContext.transitionWasCancelled)

В

func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {}

из протокола UIViewControllerAnimatedTransitioning

Ответ 6

Лучше всего удалить UITransitionView, чтобы быть четким

используйте этот код линии SWIFT 3.0

 @IBAction func MoveBack(_ sender: Any)
    {
        dismiss(animated: true, completion: nil)
      
    }