Просмотр заблокирован 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)
}