diff --git a/MVMCoreUI/BaseControllers/MFScrollingViewController.m b/MVMCoreUI/BaseControllers/MFScrollingViewController.m index 56019cb7..67e01d93 100644 --- a/MVMCoreUI/BaseControllers/MFScrollingViewController.m +++ b/MVMCoreUI/BaseControllers/MFScrollingViewController.m @@ -91,7 +91,7 @@ static NSTimeInterval const HandScrollAnimationTiming = 7.f; - (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; - BOOL automaticInset = self.navigationController && self.scrollView.contentInsetAdjustmentBehavior == UIScrollViewContentInsetAdjustmentAutomatic; + BOOL automaticInset = self.scrollView.contentInsetAdjustmentBehavior == UIScrollViewContentInsetAdjustmentAutomatic; // Takes into account the navigation bar. if (!automaticInset && (self.edgesForExtendedLayout & UIRectEdgeTop)) { diff --git a/MVMCoreUI/Containers/SplitViewController/MVMCoreUIDetailViewProtocol.h b/MVMCoreUI/Containers/SplitViewController/MVMCoreUIDetailViewProtocol.h index 038769fb..377508c7 100644 --- a/MVMCoreUI/Containers/SplitViewController/MVMCoreUIDetailViewProtocol.h +++ b/MVMCoreUI/Containers/SplitViewController/MVMCoreUIDetailViewProtocol.h @@ -16,7 +16,9 @@ NS_ASSUME_NONNULL_BEGIN @optional - (void)panelWillAppear:(nonnull NSObject *)panel; +- (void)panelWillAppear:(nonnull NSObject *)panel overtakingDetail:(BOOL)willOvertake; - (void)panelDidAppear:(nonnull NSObject *)panel; +- (void)panelDidAppear:(nonnull NSObject *)panel overtakingDetail:(BOOL)didOvertake; - (void)panelWillDisappear:(nonnull NSObject *)panel; - (void)panelDidDisappear:(nonnull NSObject *)panel; diff --git a/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m b/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m index b529ac19..b5177b9b 100644 --- a/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m +++ b/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m @@ -357,16 +357,19 @@ CGFloat const PanelAnimationDuration = 0.2; - (void)showLeftPanelAnimated:(BOOL)animated explict:(BOOL)explict { [MVMCoreDispatchUtility performBlockOnMainThread:^{ if (self.mainViewLeading.constant < .1) { + BOOL shouldExtendLeftPanel = [self shouldExtendLeftPanel]; + if (explict) { self.explictlyShowingPanel = self.leftPanel; } + void (^animations)(void) = [self getLeftPanelShowAnimationBlock]; void (^completion)(BOOL) = ^(BOOL finished){ - [self panelDidAppear:self.leftPanel animated:animated]; + [self panelDidAppear:self.leftPanel didExtend:shouldExtendLeftPanel animated:animated]; }; - if (![self shouldExtendLeftPanel]) { + if (!shouldExtendLeftPanel) { if ([self.leftPanel respondsToSelector:@selector(showArrow)]){ [self.leftPanel showArrow]; } @@ -389,7 +392,7 @@ CGFloat const PanelAnimationDuration = 0.2; } self.mainViewCoverView.hidden = NO; - [self panelWillAppear:self.leftPanel animated:animated]; + [self panelWillAppear:self.leftPanel willExtend:shouldExtendLeftPanel animated:animated]; if (animated) { [UIView animateWithDuration:PanelAnimationDuration delay:0 options:UIViewAnimationOptionCurveLinear animations:animations completion:completion]; } else { @@ -547,19 +550,22 @@ CGFloat const PanelAnimationDuration = 0.2; - (void)showRightPanelAnimated:(BOOL)animated explict:(BOOL)explict { [MVMCoreDispatchUtility performBlockOnMainThread:^{ if (self.mainViewTrailing.constant < .1) { + BOOL shouldExtendRightPanel = [self shouldExtendRightPanel]; + if (explict) { self.explictlyShowingPanel = self.rightPanel; } + void (^animations)(void) = [self getRightPanelShowAnimationBlock]; void (^completion)(BOOL) = ^(BOOL finished){ - [self panelDidAppear:self.rightPanel animated:animated]; + [self panelDidAppear:self.rightPanel didExtend:shouldExtendRightPanel animated:animated]; self.mainView.accessibilityElementsHidden = YES; UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, self.rightPanel); }; self.mainViewCoverView.hidden = NO; - if (![self shouldExtendRightPanel]) { + if (!shouldExtendRightPanel) { if ([self.rightPanel respondsToSelector:@selector(showArrow)]){ [self.rightPanel showArrow]; } @@ -579,7 +585,7 @@ CGFloat const PanelAnimationDuration = 0.2; self.rightPanelSeparator = rightPanelSeparator; } - [self panelWillAppear:self.rightPanel animated:animated]; + [self panelWillAppear:self.rightPanel willExtend:shouldExtendRightPanel animated:animated]; if (animated) { [UIView animateWithDuration:PanelAnimationDuration delay:0 options:UIViewAnimationOptionCurveLinear animations:animations completion:completion]; } else { @@ -612,7 +618,7 @@ CGFloat const PanelAnimationDuration = 0.2; [self hideRightPanelIfNeededAnimated:YES]; } -- (void)panelWillAppear:(UIViewController *)panel animated:(BOOL)animated { +- (void)panelWillAppear:(UIViewController *)panel willExtend:(BOOL)willExtend animated:(BOOL)animated { if ([panel respondsToSelector:@selector(willAppear:)]) { [panel willAppear:animated]; } else { @@ -621,13 +627,15 @@ CGFloat const PanelAnimationDuration = 0.2; UIViewController *controller = [self getCurrentDetailViewController]; if ([controller.class conformsToProtocol:@protocol(MVMCoreUIDetailViewProtocol)]) { UIViewController * protocolController = (UIViewController *)controller; - if ([protocolController respondsToSelector:@selector(panelWillAppear:)]) { + if ([protocolController respondsToSelector:@selector(panelWillAppear:overtakingDetail:)]) { + [protocolController panelWillAppear:panel overtakingDetail:!willExtend]; + } else if ([protocolController respondsToSelector:@selector(panelWillAppear:)]) { [protocolController panelWillAppear:panel]; } } } -- (void)panelDidAppear:(UIViewController *)panel animated:(BOOL)animated { +- (void)panelDidAppear:(UIViewController *)panel didExtend:(BOOL)didExtend animated:(BOOL)animated { if ([panel respondsToSelector:@selector(didAppear:)]) { [panel didAppear:animated]; } else { @@ -636,7 +644,9 @@ CGFloat const PanelAnimationDuration = 0.2; UIViewController *controller = [self getCurrentDetailViewController]; if ([controller.class conformsToProtocol:@protocol(MVMCoreUIDetailViewProtocol)]) { UIViewController * protocolController = (UIViewController *)controller; - if ([protocolController respondsToSelector:@selector(panelDidAppear:)]) { + if ([protocolController respondsToSelector:@selector(panelDidAppear:overtakingDetail:)]) { + [protocolController panelDidAppear:panel overtakingDetail:!didExtend]; + } else if ([protocolController respondsToSelector:@selector(panelDidAppear:)]) { [protocolController panelDidAppear:panel]; } }