1#import "RNDateTimePickerShadowView.h" 2 3@implementation RNDateTimePickerShadowView 4 5- (instancetype)init 6{ 7 if (self = [super init]) { 8 YGNodeSetMeasureFunc(self.yogaNode, RNDateTimePickerShadowViewMeasure); 9 } 10 return self; 11} 12 13- (void)setDate:(NSDate *)date { 14 _date = date; 15 YGNodeMarkDirty(self.yogaNode); 16} 17 18- (void)setLocale:(NSLocale *)locale { 19 _locale = locale; 20 YGNodeMarkDirty(self.yogaNode); 21} 22 23- (void)setMode:(UIDatePickerMode)mode { 24 _mode = mode; 25 YGNodeMarkDirty(self.yogaNode); 26} 27 28 29- (void)setDisplayIOS:(UIDatePickerStyle)displayIOS { 30 _displayIOS = displayIOS; 31 YGNodeMarkDirty(self.yogaNode); 32} 33 34static YGSize RNDateTimePickerShadowViewMeasure(YGNodeRef node, float width, YGMeasureMode widthMode, float height, YGMeasureMode heightMode) 35{ 36 RNDateTimePickerShadowView *shadowPickerView = (__bridge RNDateTimePickerShadowView *)YGNodeGetContext(node); 37 38 __block CGSize size; 39 dispatch_sync(dispatch_get_main_queue(), ^{ 40 [shadowPickerView.picker setDate:shadowPickerView.date]; 41 [shadowPickerView.picker setDatePickerMode:shadowPickerView.mode]; 42 [shadowPickerView.picker setLocale:shadowPickerView.locale]; 43 if (@available(iOS 14.0, *)) { 44 [shadowPickerView.picker setPreferredDatePickerStyle:shadowPickerView.displayIOS]; 45 } 46 size = [shadowPickerView.picker sizeThatFits:UILayoutFittingCompressedSize]; 47 size.width += 10; 48 }); 49 50 return (YGSize){ 51 RCTYogaFloatFromCoreGraphicsFloat(size.width), 52 RCTYogaFloatFromCoreGraphicsFloat(size.height) 53 }; 54} 55 56@end 57