Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix styling options on iOS 13.4 #6087

Merged
merged 3 commits into from
Mar 30, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions lib/ios/RNNBasePresenter.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,12 @@ typedef void (^RNNReactViewReadyCompletionBlock)(void);

- (UINavigationItem *)currentNavigationItem;

- (UIStatusBarStyle)getStatusBarStyle:(RNNNavigationOptions *)resolvedOptions;
- (void)willMoveToParentViewController:(UIViewController *)parent;

- (UIInterfaceOrientationMask)getOrientation:(RNNNavigationOptions *)options;
- (UIStatusBarStyle)getStatusBarStyle;

- (BOOL)statusBarVisibile:(UINavigationController *)stack resolvedOptions:(RNNNavigationOptions *)resolvedOptions;
- (UIInterfaceOrientationMask)getOrientation;

- (BOOL)getStatusBarVisibility;

@end
21 changes: 14 additions & 7 deletions lib/ios/RNNBasePresenter.m
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,13 @@ - (void)componentDidDisappear {

}

- (void)willMoveToParentViewController:(UIViewController *)parent {
if (parent) {
[self applyOptionsOnWillMoveToParentViewController:self.boundViewController.resolveOptions];
[self.boundViewController onChildAddToParent:self.boundViewController options:self.boundViewController.resolveOptions];
}
}

- (void)applyOptionsOnInit:(RNNNavigationOptions *)initialOptions {
UIViewController* viewController = self.boundViewController;
RNNNavigationOptions *withDefault = [initialOptions withDefault:[self defaultOptions]];
Expand Down Expand Up @@ -78,8 +85,8 @@ - (void)viewDidLayoutSubviews {

}

- (UIStatusBarStyle)getStatusBarStyle:(RNNNavigationOptions *)resolvedOptions {
RNNNavigationOptions *withDefault = [resolvedOptions withDefault:[self defaultOptions]];
- (UIStatusBarStyle)getStatusBarStyle {
RNNNavigationOptions *withDefault = [self.boundViewController.resolveOptions withDefault:[self defaultOptions]];
NSString* statusBarStyle = [withDefault.statusBar.style getWithDefaultValue:@"default"];
if ([statusBarStyle isEqualToString:@"light"]) {
return UIStatusBarStyleLightContent;
Expand All @@ -98,16 +105,16 @@ - (UINavigationItem *)currentNavigationItem {
return self.boundViewController.getCurrentChild.navigationItem;
}

- (UIInterfaceOrientationMask)getOrientation:(RNNNavigationOptions *)options {
return [options withDefault:[self defaultOptions]].layout.supportedOrientations;
- (UIInterfaceOrientationMask)getOrientation {
return [self.boundViewController.resolveOptions withDefault:self.defaultOptions].layout.supportedOrientations;
}

- (BOOL)statusBarVisibile:(UINavigationController *)stack resolvedOptions:(RNNNavigationOptions *)resolvedOptions {
RNNNavigationOptions *withDefault = [resolvedOptions withDefault:self.defaultOptions];
- (BOOL)getStatusBarVisibility {
RNNNavigationOptions *withDefault = [self.boundViewController.resolveOptions withDefault:self.defaultOptions];
if (withDefault.statusBar.visible.hasValue) {
return ![withDefault.statusBar.visible get];
} else if ([withDefault.statusBar.hideWithTopBar getWithDefaultValue:NO]) {
return stack.isNavigationBarHidden;
return self.boundViewController.stack.isNavigationBarHidden;
}
return NO;
}
Expand Down
27 changes: 19 additions & 8 deletions lib/ios/RNNBottomTabsController.m
Original file line number Diff line number Diff line change
Expand Up @@ -87,14 +87,6 @@ - (void)setSelectedIndex:(NSUInteger)selectedIndex {
[super setSelectedIndex:selectedIndex];
}

- (UIStatusBarStyle)preferredStatusBarStyle {
return [[self presenter] getStatusBarStyle:self.resolveOptions];
}

- (BOOL)prefersStatusBarHidden {
return [self.presenter statusBarVisibile:self.navigationController resolvedOptions:self.resolveOptions];
}

#pragma mark UITabBarControllerDelegate

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
Expand All @@ -121,4 +113,23 @@ - (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectView
return NO;
}

# pragma mark - UIViewController overrides

- (void)willMoveToParentViewController:(UIViewController *)parent {
[self.presenter willMoveToParentViewController:parent];
}

- (UIStatusBarStyle)preferredStatusBarStyle {
return [self.presenter getStatusBarStyle];
}

- (BOOL)prefersStatusBarHidden {
return [self.presenter getStatusBarVisibility];
}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
return [self.presenter getOrientation];
}


@end
27 changes: 18 additions & 9 deletions lib/ios/RNNComponentViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ @implementation RNNComponentViewController

- (instancetype)initWithLayoutInfo:(RNNLayoutInfo *)layoutInfo rootViewCreator:(id<RNNComponentViewCreator>)creator eventEmitter:(RNNEventEmitter *)eventEmitter presenter:(RNNComponentPresenter *)presenter options:(RNNNavigationOptions *)options defaultOptions:(RNNNavigationOptions *)defaultOptions {
self = [super initWithLayoutInfo:layoutInfo creator:creator options:options defaultOptions:defaultOptions presenter:presenter eventEmitter:eventEmitter childViewControllers:nil];
self.extendedLayoutIncludesOpaqueBars = YES;
if (@available(iOS 13.0, *)) {
self.navigationItem.standardAppearance = [UINavigationBarAppearance new];
self.navigationItem.scrollEdgeAppearance = [UINavigationBarAppearance new];
Expand Down Expand Up @@ -79,14 +78,6 @@ - (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
[self.eventEmitter sendOnSearchBarCancelPressed:self.layoutInfo.componentId];
}

- (UIStatusBarStyle)preferredStatusBarStyle {
return [_presenter getStatusBarStyle:[self resolveOptions]];
}

- (BOOL)prefersStatusBarHidden {
return [self.presenter statusBarVisibile:self.navigationController resolvedOptions:self.resolveOptions];
}

- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location{
return self.previewController;
}
Expand Down Expand Up @@ -139,5 +130,23 @@ -(void)onButtonPress:(RNNUIBarButtonItem *)barButtonItem {
[self.eventEmitter sendOnNavigationButtonPressed:self.layoutInfo.componentId buttonId:barButtonItem.buttonId];
}

# pragma mark - UIViewController overrides

- (void)willMoveToParentViewController:(UIViewController *)parent {
[self.presenter willMoveToParentViewController:parent];
}

- (UIStatusBarStyle)preferredStatusBarStyle {
return [self.presenter getStatusBarStyle];
}

- (BOOL)prefersStatusBarHidden {
return [self.presenter getStatusBarVisibility];
}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
return [self.presenter getOrientation];
}


@end
18 changes: 18 additions & 0 deletions lib/ios/RNNExternalViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,22 @@ - (void)render {
[self readyForPresentation];
}

# pragma mark - UIViewController overrides

- (void)willMoveToParentViewController:(UIViewController *)parent {
[self.presenter willMoveToParentViewController:parent];
}

- (UIStatusBarStyle)preferredStatusBarStyle {
return [self.presenter getStatusBarStyle];
}

- (BOOL)prefersStatusBarHidden {
return [self.presenter getStatusBarVisibility];
}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
return [self.presenter getOrientation];
}

@end
16 changes: 15 additions & 1 deletion lib/ios/RNNSideMenuChildVC.m
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,22 @@ - (UIViewController *)getCurrentChild {
return self.child;
}

# pragma mark - UIViewController overrides

- (void)willMoveToParentViewController:(UIViewController *)parent {
[self.presenter willMoveToParentViewController:parent];
}

- (UIStatusBarStyle)preferredStatusBarStyle {
return [[self presenter] getStatusBarStyle:[self resolveOptions]];
return [self.presenter getStatusBarStyle];
}

- (BOOL)prefersStatusBarHidden {
return [self.presenter getStatusBarVisibility];
}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
return [self.presenter getOrientation];
}

@end
26 changes: 18 additions & 8 deletions lib/ios/RNNSideMenuController.m
Original file line number Diff line number Diff line change
Expand Up @@ -130,14 +130,6 @@ -(void)setControllers:(NSArray*)controllers {
}
}

- (UIStatusBarStyle)preferredStatusBarStyle {
return self.openedViewController.preferredStatusBarStyle;
}

- (BOOL)prefersStatusBarHidden {
return [self.presenter statusBarVisibile:self.navigationController resolvedOptions:self.resolveOptions];
}

- (UIViewController<RNNLayoutProtocol> *)getCurrentChild {
return self.openedViewController;
}
Expand All @@ -163,4 +155,22 @@ - (RNNNavigationOptions *)resolveOptions {
return options;
}

# pragma mark - UIViewController overrides

- (void)willMoveToParentViewController:(UIViewController *)parent {
[self.presenter willMoveToParentViewController:parent];
}

- (UIStatusBarStyle)preferredStatusBarStyle {
return [self.presenter getStatusBarStyle];
}

- (BOOL)prefersStatusBarHidden {
return [self.presenter getStatusBarVisibility];
}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
return [self.presenter getOrientation];
}

@end
22 changes: 18 additions & 4 deletions lib/ios/RNNSplitViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,26 @@ - (void)setViewControllers:(NSArray<__kindof UIViewController *> *)viewControlle
self.delegate = masterViewController;
}

-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
}

- (UIViewController *)getCurrentChild {
return self.viewControllers[0];
}

# pragma mark - UIViewController overrides

- (void)willMoveToParentViewController:(UIViewController *)parent {
[self.presenter willMoveToParentViewController:parent];
}

- (UIStatusBarStyle)preferredStatusBarStyle {
return [self.presenter getStatusBarStyle];
}

- (BOOL)prefersStatusBarHidden {
return [self.presenter getStatusBarVisibility];
}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
return [self.presenter getOrientation];
}

@end
26 changes: 18 additions & 8 deletions lib/ios/RNNStackController.m
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,6 @@ - (void)mergeChildOptions:(RNNNavigationOptions *)options child:(UIViewControlle
[self.parentViewController mergeChildOptions:options child:child];
}

- (UIStatusBarStyle)preferredStatusBarStyle {
return [_presenter getStatusBarStyle:self.resolveOptions];
}

- (BOOL)prefersStatusBarHidden {
return [self.presenter statusBarVisibile:self.navigationController resolvedOptions:self.resolveOptions];
}

- (UIViewController *)popViewControllerAnimated:(BOOL)animated {
[self prepareForPop];
return [super popViewControllerAnimated:animated];
Expand All @@ -62,4 +54,22 @@ - (UIViewController *)childViewControllerForStatusBarStyle {
return self.topViewController;
}

# pragma mark - UIViewController overrides

- (void)willMoveToParentViewController:(UIViewController *)parent {
[self.presenter willMoveToParentViewController:parent];
}

- (UIStatusBarStyle)preferredStatusBarStyle {
return [self.presenter getStatusBarStyle];
}

- (BOOL)prefersStatusBarHidden {
return [self.presenter getStatusBarVisibility];
}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
return [self.presenter getOrientation];
}

@end
17 changes: 1 addition & 16 deletions lib/ios/UIViewController+LayoutProtocol.m
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ - (instancetype)initWithLayoutInfo:(RNNLayoutInfo *)layoutInfo
self.eventEmitter = eventEmitter;
self.presenter = presenter;
[self.presenter bindViewController:self];
self.extendedLayoutIncludesOpaqueBars = YES;
if ([self respondsToSelector:@selector(setViewControllers:)]) {
[self performSelector:@selector(setViewControllers:) withObject:childViewControllers];
}
Expand Down Expand Up @@ -51,15 +52,6 @@ - (void)overrideOptions:(RNNNavigationOptions *)options {
[self.options overrideOptions:options];
}

- (BOOL)extendedLayoutIncludesOpaqueBars {
return YES;
}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
UIInterfaceOrientationMask interfaceOrientationMask = self.presenter ? [self.presenter getOrientation:[self resolveOptions]] : [[UIApplication sharedApplication] supportedInterfaceOrientationsForWindow:[[UIApplication sharedApplication] keyWindow]];
return interfaceOrientationMask;
}

- (UINavigationController *)stack {
if ([self isKindOfClass:UINavigationController.class]) {
return (UINavigationController *)self;
Expand Down Expand Up @@ -161,13 +153,6 @@ - (void)componentDidDisappear {
[self.parentViewController componentDidDisappear];
}

- (void)willMoveToParentViewController:(UIViewController *)parent {
if (parent) {
[self.presenter applyOptionsOnWillMoveToParentViewController:self.resolveOptions];
[self onChildAddToParent:self options:self.resolveOptions];
}
}

#pragma mark getters and setters to associated object

- (RNNNavigationOptions *)options {
Expand Down
2 changes: 1 addition & 1 deletion playground/ios/NavigationTests/BottomTabsControllerTest.m
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ - (void)testGetCurrentChild_shouldReturnSelectedViewController {
}

- (void)testPreferredStatusBarStyle_shouldInvokeSelectedViewControllerPreferredStatusBarStyle {
[[self.mockTabBarPresenter expect] getStatusBarStyle:[OCMArg any]];
[[self.mockTabBarPresenter expect] getStatusBarStyle];
[self.uut preferredStatusBarStyle];
[self.mockTabBarPresenter verify];
}
Expand Down
Loading