Skip to content

Commit 06ebaf2

Browse files
sherginfacebook-github-bot
authored andcommitted
Missing moving pieces of RCTSurfaceHostingView
Summary: Now it actually works. Reviewed By: mmmulani Differential Revision: D6701105 fbshipit-source-id: 16f3f4e319f874f9a08867b784d13aad4fa22aeb
1 parent 7d9e902 commit 06ebaf2

File tree

4 files changed

+88
-18
lines changed

4 files changed

+88
-18
lines changed

React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingView.mm

+32-18
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,24 @@ - (instancetype)initWithSurface:(RCTSurface *)surface
6161
return self;
6262
}
6363

64+
- (void)setFrame:(CGRect)frame
65+
{
66+
[super setFrame:frame];
67+
68+
CGSize minimumSize;
69+
CGSize maximumSize;
70+
71+
RCTSurfaceMinimumSizeAndMaximumSizeFromSizeAndSizeMeasureMode(
72+
self.bounds.size,
73+
_sizeMeasureMode,
74+
minimumSize,
75+
maximumSize
76+
);
77+
78+
[_surface setMinimumSize:minimumSize
79+
maximumSize:maximumSize];
80+
}
81+
6482
- (CGSize)intrinsicContentSize
6583
{
6684
if (RCTSurfaceStageIsPreparing(_stage)) {
@@ -84,24 +102,15 @@ - (CGSize)sizeThatFits:(CGSize)size
84102
return CGSizeZero;
85103
}
86104

87-
CGSize minimumSize = CGSizeZero;
88-
CGSize maximumSize = CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX);
105+
CGSize minimumSize;
106+
CGSize maximumSize;
89107

90-
if (_sizeMeasureMode & RCTSurfaceSizeMeasureModeWidthExact) {
91-
minimumSize.width = size.width;
92-
maximumSize.width = size.width;
93-
}
94-
else if (_sizeMeasureMode & RCTSurfaceSizeMeasureModeWidthAtMost) {
95-
maximumSize.width = size.width;
96-
}
97-
98-
if (_sizeMeasureMode & RCTSurfaceSizeMeasureModeHeightExact) {
99-
minimumSize.height = size.height;
100-
maximumSize.height = size.height;
101-
}
102-
else if (_sizeMeasureMode & RCTSurfaceSizeMeasureModeHeightAtMost) {
103-
maximumSize.height = size.height;
104-
}
108+
RCTSurfaceMinimumSizeAndMaximumSizeFromSizeAndSizeMeasureMode(
109+
size,
110+
_sizeMeasureMode,
111+
minimumSize,
112+
maximumSize
113+
);
105114

106115
return [_surface sizeThatFitsMinimumSize:minimumSize
107116
maximumSize:maximumSize];
@@ -143,6 +152,8 @@ - (void)setIsActivityIndicatorViewVisible:(BOOL)visible
143152
return;
144153
}
145154

155+
_isActivityIndicatorViewVisible = visible;
156+
146157
if (visible) {
147158
if (_activityIndicatorViewFactory) {
148159
_activityIndicatorView = _activityIndicatorViewFactory();
@@ -164,6 +175,8 @@ - (void)setIsSurfaceViewVisible:(BOOL)visible
164175
return;
165176
}
166177

178+
_isSurfaceViewVisible = visible;
179+
167180
if (visible) {
168181
_surfaceView = _surface.view;
169182
_surfaceView.frame = self.bounds;
@@ -181,7 +194,7 @@ - (void)setActivityIndicatorViewFactory:(RCTSurfaceHostingViewActivityIndicatorV
181194
{
182195
_activityIndicatorViewFactory = activityIndicatorViewFactory;
183196
if (_isActivityIndicatorViewVisible) {
184-
_isActivityIndicatorViewVisible = NO;
197+
self.isActivityIndicatorViewVisible = NO;
185198
self.isActivityIndicatorViewVisible = YES;
186199
}
187200
}
@@ -190,6 +203,7 @@ - (void)setActivityIndicatorViewFactory:(RCTSurfaceHostingViewActivityIndicatorV
190203

191204
- (void)_invalidateLayout
192205
{
206+
[self invalidateIntrinsicContentSize];
193207
[self.superview setNeedsLayout];
194208
}
195209

React/Base/Surface/SurfaceHostingView/RCTSurfaceSizeMeasureMode.h

+12
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010
#import <UIKit/UIKit.h>
1111

12+
#import <React/RCTDefines.h>
13+
1214
/**
1315
* Bitmask defines how size constrains from `-[UIView sizeThatFits:]`
1416
* are translated to `-[RCTSurface sizeThatFitsMinimumSize:maximumSize:]`.
@@ -21,3 +23,13 @@ typedef NS_OPTIONS(NSInteger, RCTSurfaceSizeMeasureMode) {
2123
RCTSurfaceSizeMeasureModeHeightExact = 1 << 2,
2224
RCTSurfaceSizeMeasureModeHeightAtMost = 2 << 2,
2325
};
26+
27+
/**
28+
* Returns size constraints based on `size` and `sizeMeasureMode`.
29+
*/
30+
RCT_EXTERN void RCTSurfaceMinimumSizeAndMaximumSizeFromSizeAndSizeMeasureMode(
31+
CGSize size,
32+
RCTSurfaceSizeMeasureMode sizeMeasureMode,
33+
CGSize &minimumSize,
34+
CGSize &maximumSize
35+
);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/**
2+
* Copyright (c) 2015-present, Facebook, Inc.
3+
* All rights reserved.
4+
*
5+
* This source code is licensed under the BSD-style license found in the
6+
* LICENSE file in the root directory of this source tree. An additional grant
7+
* of patent rights can be found in the PATENTS file in the same directory.
8+
*/
9+
10+
#import <UIKit/UIKit.h>
11+
12+
#import "RCTSurfaceSizeMeasureMode.h"
13+
14+
void RCTSurfaceMinimumSizeAndMaximumSizeFromSizeAndSizeMeasureMode(
15+
CGSize size,
16+
RCTSurfaceSizeMeasureMode sizeMeasureMode,
17+
CGSize &minimumSize,
18+
CGSize &maximumSize
19+
) {
20+
minimumSize = CGSizeZero;
21+
maximumSize = CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX);
22+
23+
if (sizeMeasureMode & RCTSurfaceSizeMeasureModeWidthExact) {
24+
minimumSize.width = size.width;
25+
maximumSize.width = size.width;
26+
}
27+
else if (sizeMeasureMode & RCTSurfaceSizeMeasureModeWidthAtMost) {
28+
maximumSize.width = size.width;
29+
}
30+
31+
if (sizeMeasureMode & RCTSurfaceSizeMeasureModeHeightExact) {
32+
minimumSize.height = size.height;
33+
maximumSize.height = size.height;
34+
}
35+
else if (sizeMeasureMode & RCTSurfaceSizeMeasureModeHeightAtMost) {
36+
maximumSize.height = size.height;
37+
}
38+
}

React/React.xcodeproj/project.pbxproj

+6
Original file line numberDiff line numberDiff line change
@@ -980,6 +980,8 @@
980980
590D7BFE1EBD458B00D8A370 /* RCTShadowView+Layout.h in Headers */ = {isa = PBXBuildFile; fileRef = 590D7BFB1EBD458B00D8A370 /* RCTShadowView+Layout.h */; };
981981
590D7BFF1EBD458B00D8A370 /* RCTShadowView+Layout.m in Sources */ = {isa = PBXBuildFile; fileRef = 590D7BFC1EBD458B00D8A370 /* RCTShadowView+Layout.m */; };
982982
590D7C001EBD458B00D8A370 /* RCTShadowView+Layout.m in Sources */ = {isa = PBXBuildFile; fileRef = 590D7BFC1EBD458B00D8A370 /* RCTShadowView+Layout.m */; };
983+
5925356A20084D0600DD584B /* RCTSurfaceSizeMeasureMode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5925356920084D0600DD584B /* RCTSurfaceSizeMeasureMode.mm */; };
984+
5925356B20084D0600DD584B /* RCTSurfaceSizeMeasureMode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5925356920084D0600DD584B /* RCTSurfaceSizeMeasureMode.mm */; };
983985
59283CA01FD67321000EAAB9 /* RCTSurfaceStage.m in Sources */ = {isa = PBXBuildFile; fileRef = 59283C9F1FD67320000EAAB9 /* RCTSurfaceStage.m */; };
984986
59283CA11FD67321000EAAB9 /* RCTSurfaceStage.m in Sources */ = {isa = PBXBuildFile; fileRef = 59283C9F1FD67320000EAAB9 /* RCTSurfaceStage.m */; };
985987
594F0A321FD23228007FBE96 /* RCTSurfaceHostingView.h in Headers */ = {isa = PBXBuildFile; fileRef = 594F0A2F1FD23228007FBE96 /* RCTSurfaceHostingView.h */; };
@@ -2157,6 +2159,7 @@
21572159
58C571C01AA56C1900CDF9C8 /* RCTDatePickerManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = RCTDatePickerManager.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
21582160
590D7BFB1EBD458B00D8A370 /* RCTShadowView+Layout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "RCTShadowView+Layout.h"; sourceTree = "<group>"; };
21592161
590D7BFC1EBD458B00D8A370 /* RCTShadowView+Layout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "RCTShadowView+Layout.m"; sourceTree = "<group>"; };
2162+
5925356920084D0600DD584B /* RCTSurfaceSizeMeasureMode.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RCTSurfaceSizeMeasureMode.mm; sourceTree = "<group>"; };
21602163
59283C9F1FD67320000EAAB9 /* RCTSurfaceStage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTSurfaceStage.m; sourceTree = "<group>"; };
21612164
594F0A2F1FD23228007FBE96 /* RCTSurfaceHostingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTSurfaceHostingView.h; sourceTree = "<group>"; };
21622165
594F0A301FD23228007FBE96 /* RCTSurfaceHostingView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RCTSurfaceHostingView.mm; sourceTree = "<group>"; };
@@ -2765,6 +2768,7 @@
27652768
594F0A2F1FD23228007FBE96 /* RCTSurfaceHostingView.h */,
27662769
594F0A301FD23228007FBE96 /* RCTSurfaceHostingView.mm */,
27672770
594F0A311FD23228007FBE96 /* RCTSurfaceSizeMeasureMode.h */,
2771+
5925356920084D0600DD584B /* RCTSurfaceSizeMeasureMode.mm */,
27682772
);
27692773
path = SurfaceHostingView;
27702774
sourceTree = "<group>";
@@ -4164,6 +4168,7 @@
41644168
3D7BFD181EA8E351008DFB7A /* RCTPackagerClient.m in Sources */,
41654169
2D3B5EA71D9B08CE00451313 /* RCTTouchHandler.m in Sources */,
41664170
59D031F01F8353D3008361F0 /* RCTSafeAreaShadowView.m in Sources */,
4171+
5925356B20084D0600DD584B /* RCTSurfaceSizeMeasureMode.mm in Sources */,
41674172
3D05745A1DE5FFF500184BB4 /* RCTJavaScriptLoader.mm in Sources */,
41684173
2D3B5EA41D9B08C200451313 /* RCTPerformanceLogger.m in Sources */,
41694174
3DCE53251FEAB1E000613583 /* RCTShadowView.m in Sources */,
@@ -4477,6 +4482,7 @@
44774482
58114A161AAE854800E7D092 /* RCTPicker.m in Sources */,
44784483
137327E81AA5CF210034F82E /* RCTTabBarItem.m in Sources */,
44794484
83A1FE8C1B62640A00BE0E65 /* RCTModalHostView.m in Sources */,
4485+
5925356A20084D0600DD584B /* RCTSurfaceSizeMeasureMode.mm in Sources */,
44804486
9936F3371F5F2F480010BF04 /* PrivateDataBase.cpp in Sources */,
44814487
1450FF871BCFF28A00208362 /* RCTProfileTrampoline-arm.S in Sources */,
44824488
131B6AF51AF1093D00FFC3E0 /* RCTSegmentedControlManager.m in Sources */,

0 commit comments

Comments
 (0)