web-dev-qa-db-ja.com

表示後、UITransitionViewによってビューがブロックされる

サイドナビゲーションコントローラーがあり、UIButtonを介して表示します。このNCを[self presentviewcontroller: NC animated: YES completion: nil]によって直接ルートビューコントローラーにすると、NCのメニュー側がUITransitionViewによってブロックされ、表示されなくなります。

の画像を添付しましたview hierarchyHere は別です。

私は以下を試しました:

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が変化するため、少し途切れがちで、navigationcontrollerの一部と右上隅が黒くなります。それは非常に悪く見えます。

19
Jameson

UITransitionViewを介してタップイベントを取得するには、containerViewuserInteractionEnabledfalseに設定します。これは、UIViewControllerAnimatedTransitioningを使用してカスタム遷移アニメーションを実行している場合です。

例、animateTransition(_:)で:

func animateTransition(transitionContext: UIViewControllerContextTransitioning) {

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

    ...
}
6
SpencerBaker

私は同じ問題に直面していました、そしてこの問題は私にとって解決されました、

navigationController.setNavigationBarHidden(true、アニメーション:false)

ビューコントローラーのナビゲーションバーとしてカスタムビューを使用しているので、これは私にとってはうまくいきました。

1
infiniteLoop

私は同じ問題を抱えていましたが、少し異なるシナリオで、ビューを見つけるために非常に似たようなことをしましたが、問題を引き起こす可能性のあるビューを削除する代わりに、ユーザー操作を無効にして、タッチイベントがそれをスローするようにしましたオブジェクトはユーザーの操作を処理できます。私の場合、これはアプリをiOS 10に更新した後にのみ存在し、iOS 9で実行されている同じコードはこれに該当しませんでした。

1
yaakov_g

UITransitionViewがビューをブロックし続け、ユーザーの操作を妨げるという同様の問題がありました。

私の場合、これは未完成のカスタムアニメーションUIViewController遷移によるものでした。

私は移行を適切に完了するのを忘れていました:

TransitionContext.completeTransition(transitionContext.transitionWasCancelled)

または

TransitionContext.completeTransition(!transitionContext.transitionWasCancelled)

の中に

func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {}

UIViewControllerAnimatedTransitioningプロトコルから

0
Steefy

ポップオーバービューコントローラーでaccessibilityElementsを設定していたときに、この問題が発生しました。要素の配列の割り当てを削除して修正します。

0
StackRunner