diff --git a/React/Views/RCTDatePickerManager.m b/React/Views/RCTDatePickerManager.m index 3fb37eeadb8691..f6fec6d739f17a 100644 --- a/React/Views/RCTDatePickerManager.m +++ b/React/Views/RCTDatePickerManager.m @@ -85,11 +85,17 @@ - (UIView *)view RCT_CUSTOM_VIEW_PROPERTY(pickerStyle, UIDatePickerStyle, RCTDatePicker) { if (@available(iOS 14, *)) { + // If the style changed, then the date picker may need to be resized and will generate a layout pass to display + // correctly. We need to prevent that to get consistent layout. That's why we memorise the old frame and set it + // after style is changed. + CGRect oldFrame = view.frame; if (json) { - view.preferredDatePickerStyle = [RCTConvert UIDatePickerStyle:json]; + UIDatePickerStyle style = [RCTConvert UIDatePickerStyle:json]; + view.preferredDatePickerStyle = style; } else { view.preferredDatePickerStyle = UIDatePickerStyleWheels; } + view.frame = oldFrame; } } #endif