Merge branch 'feature/statusstyle' into 'develop'

add override status bar function

See merge request BPHV_MIPS/mvm_core_ui!31
This commit is contained in:
Pfeil, Scott Robert 2019-04-17 15:30:05 -04:00
commit c0d4e553d0
7 changed files with 67 additions and 3 deletions

View File

@ -93,7 +93,7 @@ static NSTimeInterval const HandScrollAnimationTiming = 7.f;
BOOL automaticInset = NO; BOOL automaticInset = NO;
if (@available(iOS 11.0, *)) { if (@available(iOS 11.0, *)) {
automaticInset = self.scrollView.contentInsetAdjustmentBehavior == UIScrollViewContentInsetAdjustmentAutomatic; automaticInset = self.navigationController && self.scrollView.contentInsetAdjustmentBehavior == UIScrollViewContentInsetAdjustmentAutomatic;
} }
// Takes into account the navigation bar. // Takes into account the navigation bar.

View File

@ -308,6 +308,8 @@
|| self.manager || self.manager
|| self.loadObject.requestParameters.tabWasPressed); || self.loadObject.requestParameters.tabWasPressed);
} }
} else {
[[MVMCoreUISession sharedGlobal].splitViewController.parentViewController setNeedsStatusBarAppearanceUpdate];
} }
} }
@ -498,6 +500,15 @@
} }
} }
//this method is needed for getting status bar style from present viewcotnroller
- (UIStatusBarStyle)preferredStatusBarStyle {
if ([self respondsToSelector:@selector(defaultStatusBarStyle)]) {
return [self defaultStatusBarStyle];
} else {
return UIStatusBarStyleDefault;
}
}
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];

View File

@ -30,6 +30,10 @@ NS_ASSUME_NONNULL_BEGIN
// View Controller can override this method and do custom action instead of opening the left panel // View Controller can override this method and do custom action instead of opening the left panel
- (BOOL)isOverridingLeftButton; - (BOOL)isOverridingLeftButton;
//return desired status bar style based on different View Controller
- (UIStatusBarStyle)defaultStatusBarStyle;
- (nullable UIColor *)defaultStatusBarBackgroundColor;
@end @end
NS_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END

View File

@ -105,6 +105,10 @@ typedef NS_ENUM(NSInteger, MFNumberOfDrawers) {
+ (CGFloat)getApplicationViewWidth; + (CGFloat)getApplicationViewWidth;
+ (CGFloat)getApplicationViewMaxSize; + (CGFloat)getApplicationViewMaxSize;
// return subviewcontrollers' prefer status bar style
- (UIStatusBarStyle)getDefaultStatusBarStyle;
- (nullable UIColor *)getDefaultStatusBarBackgroundColor;
#pragma mark - Main Subclassables #pragma mark - Main Subclassables
// Can subclass to set threshold for when the drawers are permanently extended. Default is 1000 for the left panel and 2000 for both. // Can subclass to set threshold for when the drawers are permanently extended. Default is 1000 for the left panel and 2000 for both.

View File

@ -877,7 +877,33 @@ CGFloat const PanelAnimationDuration = 0.2;
} }
- (UIStatusBarStyle)preferredStatusBarStyle { - (UIStatusBarStyle)preferredStatusBarStyle {
return self.topAlertView.statusBarStyle; if (self.topAlertView.topAlertObject) {
return self.topAlertView.statusBarStyle;
} else {
UIStatusBarStyle style = [self getDefaultStatusBarStyle];
[self.topAlertView resetDefaultBackgroundColor:[self getDefaultStatusBarBackgroundColor] basedOnStatusBarStyle:style];
return style;
}
}
- (UIStatusBarStyle)getDefaultStatusBarStyle {
UIViewController *viewController = [self getCurrentDetailViewController];
if ([viewController conformsToProtocol:@protocol(MVMCoreUIDetailViewProtocol)]
&& [viewController respondsToSelector:@selector(defaultStatusBarStyle)]
&& [((UIViewController <MVMCoreUIDetailViewProtocol> *)viewController) defaultStatusBarStyle]) {
return [((UIViewController <MVMCoreUIDetailViewProtocol> *)viewController) defaultStatusBarStyle];
}
return UIStatusBarStyleDefault;
}
- (UIColor *)getDefaultStatusBarBackgroundColor {
UIViewController *viewController = [self getCurrentDetailViewController];
if ([viewController conformsToProtocol:@protocol(MVMCoreUIDetailViewProtocol)]
&& [viewController respondsToSelector:@selector(defaultStatusBarBackgroundColor)]
&& [((UIViewController <MVMCoreUIDetailViewProtocol> *)viewController) defaultStatusBarBackgroundColor]) {
return [((UIViewController <MVMCoreUIDetailViewProtocol> *)viewController) defaultStatusBarBackgroundColor];
}
return nil;
} }
#pragma mark - Getters #pragma mark - Getters

View File

@ -41,6 +41,9 @@
- (void)expandStatusBarView; - (void)expandStatusBarView;
- (void)collapseStatusBarView; - (void)collapseStatusBarView;
/// reset status bar background color, when backgroundColor is nil corresponding background color will be set based on style
- (void)resetDefaultBackgroundColor:(nullable UIColor *)backgroundColor basedOnStatusBarStyle:(UIStatusBarStyle)style;
// Can be subclassed for custom views. // Can be subclassed for custom views.
- (nonnull MVMCoreUITopAlertBaseView *)topAlertViewForTopAlertObject:(nullable MVMCoreTopAlertObject *)topAlertObject animationDelegate:(nonnull id <MVMCoreTopAlertAnimationDelegateProtocol>)animationDelegate statusBarColor:(UIColor *_Nullable *_Nullable)statusBarColor; - (nonnull MVMCoreUITopAlertBaseView *)topAlertViewForTopAlertObject:(nullable MVMCoreTopAlertObject *)topAlertObject animationDelegate:(nonnull id <MVMCoreTopAlertAnimationDelegateProtocol>)animationDelegate statusBarColor:(UIColor *_Nullable *_Nullable)statusBarColor;

View File

@ -189,7 +189,6 @@ NSString * const MFAccTopAlertClosed = @"Top alert notification is closed.";
[weakSelf.superview layoutIfNeeded]; [weakSelf.superview layoutIfNeeded];
} completion:^(BOOL finished) { } completion:^(BOOL finished) {
[weakSelf.animationDelegate topAlertViewFinishAnimation]; [weakSelf.animationDelegate topAlertViewFinishAnimation];
[weakSelf setStatusBarColor:[UIColor whiteColor] statusBarStyle:UIStatusBarStyleDefault];
UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil); UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil);
UIView *view = weakSelf.currentAlert; UIView *view = weakSelf.currentAlert;
@ -204,6 +203,9 @@ NSString * const MFAccTopAlertClosed = @"Top alert notification is closed.";
[operation markAsFinished]; [operation markAsFinished];
completionHandler(finished); completionHandler(finished);
weakSelf.topAlertObject = nil; weakSelf.topAlertObject = nil;
[MVMCoreDispatchUtility performBlockOnMainThread:^{
[weakSelf setStatusBarColor:[UIColor whiteColor] statusBarStyle:UIStatusBarStyleDefault];
}];
}]; }];
}]; }];
}]; }];
@ -242,4 +244,18 @@ NSString * const MFAccTopAlertClosed = @"Top alert notification is closed.";
}]; }];
} }
- (void)resetDefaultBackgroundColor:(UIColor *)backgroundColor basedOnStatusBarStyle:(UIStatusBarStyle)style {
if (!self.topAlertObject) {
UIColor *defaultStatusBarBackgroundColor = backgroundColor;
if (!defaultStatusBarBackgroundColor) {
defaultStatusBarBackgroundColor = style == UIStatusBarStyleDefault ? [UIColor whiteColor] : [UIColor blackColor];
}
//color doesn't match the current default value
if (!CGColorEqualToColor(defaultStatusBarBackgroundColor.CGColor, self.statusBarView.backgroundColor.CGColor)) {
self.statusBarView.backgroundColor = defaultStatusBarBackgroundColor;
}
}
}
@end @end