Ich habe eine UIViewController
, die eine weitere UIViewController
darstellt. Beide View-Controller verwenden topLayoutGuide
und bottomLayoutGuide
mit Auto-Layout.Benutzerdefinierter UIViewController-Übergang hat einen falschen topLayoutGuide und bottomLayoutGuide gesetzt, wenn die Anrufleiste aktiv ist.
Alles ist in Ordnung, mit und ohne In-Call-Bar. Oder mit oder ohne individuellen Übergang ...
Aber, wenn es eine in-Call ist bar und einen benutzerdefinierten Übergang, die subview meiner präsentiert View-Controller ist fehl am Platz von 20px nach unten (was zu einer abgeschnittenen Ansicht unten).
ich geprüft und es ist die topLayoutGuide
und bottomLayoutGuide
, die fehl am Platze sind ...
Hier ist der Code des Übergangs:
#pragma mark - GETTER
- (CGFloat)presentationTopProgressValue {
return __fromViewControllerView.y/__containerView.height;
}
#pragma mark - SETTER
- (void)set_context:(id<UIViewControllerContextTransitioning>)_context {
__context = _context;
__containerView = [__context containerView];
__fromViewController = [__context viewControllerForKey:UITransitionContextFromViewControllerKey];
__fromViewControllerView = [__fromViewController view];
__toViewController = [__context viewControllerForKey:UITransitionContextToViewControllerKey];
__toViewControllerView = [__toViewController view];
}
#pragma mark - TRANSITION
- (id<UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source {
return self;
}
#pragma mark - ANIMATING
- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext {
self._context = transitionContext;
UIDynamicAnimator *animator = [[UIDynamicAnimator alloc] initWithReferenceView:__containerView];
UIGravityBehavior *gravityBehavior = [[UIGravityBehavior alloc] initWithItems:@[__fromViewControllerView]];
gravityBehavior.gravityDirection = CGVectorMake(0, 5.0f);
__weak typeof(self) weakSelf = self;
gravityBehavior.action = ^{
typeof(self) strongSelf = weakSelf;
if ([strongSelf presentationTopProgressValue] > 1.0) {
[animator removeAllBehaviors];
[strongSelf._context completeTransition:YES];
strongSelf._context = nil;
}
};
[__containerView addSubview:__toViewControllerView];
[__containerView addSubview:__fromViewControllerView];
[animator addBehavior:gravityBehavior];
}
- (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext {
return 0.2f;
}
Hier ist der Code des präsentierenden:
MPProfileViewController *next = [MPProfileViewController new];
MPNavigationController *nav = [[MPNavigationController alloc] initWithRootViewController:next];
#warning - The transition delegate create a wrong margin layout when in-call bar is active
nav.modalPresentationStyle = UIModalPresentationFullScreen;
nav.transitioningDelegate = __dragToDismiss;
[self.navigationController presentViewController:nav animated:YES completion:nil];
haben Sie versucht nav.modalPresentationStyle = UIModalPresentationCustom; anstelle von UIModalPresentationFullScreen für Ihren benutzerdefinierten Übergang – Mukesh
habe ich versucht - funktioniert nicht. – NAlexN