diff --git a/demo/src/NavbarDemo.ts b/demo/src/NavbarDemo.ts index 5f794790..01e8a7f2 100644 --- a/demo/src/NavbarDemo.ts +++ b/demo/src/NavbarDemo.ts @@ -1,4 +1,4 @@ -import { Group, Panel, navbar, text, gravity, Color, Stack, LayoutSpec, list, NativeCall, listItem, log, vlayout, Gravity, hlayout, Text, scroller, layoutConfig, image, IView, IVLayout, ScaleType, modal, IText, network } from "doric"; +import { Group, Panel, navbar, text, gravity, Color, Stack, LayoutSpec, list, NativeCall, listItem, log, vlayout, Gravity, hlayout, Text, scroller, layoutConfig, image, IView, IVLayout, ScaleType, modal, IText, network, navigator } from "doric"; import { title, label, colors } from "./utils"; @Entry @@ -62,6 +62,17 @@ class NavbarDemo extends Panel { }) } } as IText), + label('Pop').apply({ + width: 200, + height: 50, + bgColor: colors[0], + textSize: 30, + textColor: Color.WHITE, + layoutConfig: layoutConfig().exactly(), + onClick: () => { + navigator(context).pop() + } + } as IText), ]).apply({ layoutConfig: layoutConfig().atmost().h(LayoutSpec.WRAP_CONTENT), gravity: gravity().center(), diff --git a/iOS/Example/Example/QRScanViewController.m b/iOS/Example/Example/QRScanViewController.m index b6baedca..81aa3292 100644 --- a/iOS/Example/Example/QRScanViewController.m +++ b/iOS/Example/Example/QRScanViewController.m @@ -86,7 +86,7 @@ - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects: NSString *result = qrObject.stringValue; NSLog(@"Scan result is %@", result); [[DoricDriver instance] connectDevKit:[NSString stringWithFormat:@"ws://%@:7777", result]]; - showToast([NSString stringWithFormat:@"Connected to %@", result], BOTTOM); + ShowToast([NSString stringWithFormat:@"Connected to %@", result], BOTTOM); [self.navigationController popViewControllerAnimated:NO]; } } diff --git a/iOS/Pod/Classes/DoricPanel.m b/iOS/Pod/Classes/DoricPanel.m index 1ad24ff2..a1cf9117 100644 --- a/iOS/Pod/Classes/DoricPanel.m +++ b/iOS/Pod/Classes/DoricPanel.m @@ -25,11 +25,19 @@ @implementation DoricPanel - (void)config:(NSString *)script alias:(NSString *)alias { self.doricContext = [[[DoricContext alloc] initWithScript:script source:alias] also:^(DoricContext *it) { [it.rootNode setupRootView:[[DoricStackView new] also:^(DoricStackView *it) { - it.width = self.view.width; - it.height = self.view.height; [self.view addSubview:it]; }]]; - [it initContextWithWidth:self.view.width height:self.view.height]; + }]; +} + +- (void)viewWillLayoutSubviews { + [super viewWillLayoutSubviews]; + [self.doricContext.rootNode.view also:^(DoricStackView *it) { + if (it.width != self.view.width || it.height != self.view.height) { + it.width = self.view.width; + it.height = self.view.height; + [self.doricContext initContextWithWidth:it.width height:it.height]; + } }]; } diff --git a/iOS/Pod/Classes/DoricViewController.m b/iOS/Pod/Classes/DoricViewController.m index ca021b7f..637b5b62 100644 --- a/iOS/Pod/Classes/DoricViewController.m +++ b/iOS/Pod/Classes/DoricViewController.m @@ -23,10 +23,16 @@ #import "DoricPanel.h" #import "UIView+Doric.h" #import "DoricExtensions.h" +#import "DoricUtil.h" + +@interface DoricViewController () +@property(nonatomic, strong) DoricPanel *doricPanel; +@end @implementation DoricViewController - (instancetype)initWithScheme:(NSString *)scheme alias:(NSString *)alias { if (self = [super init]) { + self.edgesForExtendedLayout = UIRectEdgeNone; DoricAsyncResult *result = [DoricJSLoaderManager.instance request:scheme]; result.resultCallback = ^(NSString *result) { dispatch_async(dispatch_get_main_queue(), ^{ @@ -34,20 +40,26 @@ - (instancetype)initWithScheme:(NSString *)scheme alias:(NSString *)alias { [panel.view also:^(UIView *it) { it.backgroundColor = [UIColor whiteColor]; it.width = self.view.width; - it.height = self.view.height - 88; - it.top = 88; + it.height = self.view.height; }]; [self.view addSubview:panel.view]; [self addChildViewController:panel]; [panel config:result alias:alias]; panel.doricContext.navigator = self; panel.doricContext.navBar = self; + self.doricPanel = panel; }); }; } return self; } +- (void)viewWillLayoutSubviews { + [super viewWillLayoutSubviews]; + self.doricPanel.view.width = self.view.width; + self.doricPanel.view.height = self.view.height; +} + - (void)doric_navigator_push:(NSString *)scheme alias:(NSString *)alias animated:(BOOL)animated { DoricViewController *viewController = [[DoricViewController alloc] initWithScheme:scheme alias:alias]; [self.navigationController pushViewController:viewController animated:animated]; @@ -70,7 +82,7 @@ - (void)doric_navBar_setTitle:(NSString *)title { } - (void)doric_navBar_setBackgroundColor:(UIColor *)color { - [self.navigationController.navigationBar setBackgroundColor:color]; + [self.navigationController.navigationBar setBackgroundImage:UIImageWithColor(color) forBarMetrics:UIBarMetricsDefault]; } diff --git a/iOS/Pod/Classes/Plugin/DoricModalPlugin.m b/iOS/Pod/Classes/Plugin/DoricModalPlugin.m index e9925e34..77944f23 100644 --- a/iOS/Pod/Classes/Plugin/DoricModalPlugin.m +++ b/iOS/Pod/Classes/Plugin/DoricModalPlugin.m @@ -32,7 +32,7 @@ - (void)toast:(NSDictionary *)dic withPromise:(DoricPromise *)promise { [dic[@"gravity"] also:^(NSNumber *it) { gravity = (DoricGravity) [it integerValue]; }]; - showToast(dic[@"msg"], gravity); + ShowToast(dic[@"msg"], gravity); }); } diff --git a/iOS/Pod/Classes/Util/DoricUtil.h b/iOS/Pod/Classes/Util/DoricUtil.h index 8931970d..ec67ceee 100644 --- a/iOS/Pod/Classes/Util/DoricUtil.h +++ b/iOS/Pod/Classes/Util/DoricUtil.h @@ -37,4 +37,6 @@ NSBundle *_Nonnull DoricBundle(void); #define DC_UNLOCK(lock) dispatch_semaphore_signal(lock); #endif -void showToast(NSString *_Nonnull text, DoricGravity gravity); \ No newline at end of file +void ShowToast(NSString *_Nonnull text, DoricGravity gravity); + +UIImage *_Nonnull UIImageWithColor(UIColor *color); \ No newline at end of file diff --git a/iOS/Pod/Classes/Util/DoricUtil.m b/iOS/Pod/Classes/Util/DoricUtil.m index 5d6f5cc2..bf41f236 100644 --- a/iOS/Pod/Classes/Util/DoricUtil.m +++ b/iOS/Pod/Classes/Util/DoricUtil.m @@ -48,7 +48,7 @@ void DoricLog(NSString *_Nonnull format, ...) { } -void showToast(NSString *text, DoricGravity gravity) { +void ShowToast(NSString *text, DoricGravity gravity) { UIView *superView = [UIApplication sharedApplication].windows.lastObject; UILabel *label = [[UILabel alloc] init]; label.font = [UIFont systemFontOfSize:20.f]; @@ -74,4 +74,15 @@ void showToast(NSString *text, DoricGravity gravity) { dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t) (2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [label removeFromSuperview]; }); -} \ No newline at end of file +} + +UIImage *UIImageWithColor(UIColor *color) { + CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f); + UIGraphicsBeginImageContext(rect.size); + CGContextRef context = UIGraphicsGetCurrentContext(); + CGContextSetFillColorWithColor(context, [color CGColor]); + CGContextFillRect(context, rect); + UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + return image; +}