mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Back out "[RN][iOS] Remove definition of viewIsDescendantOf method in RN iOS code"
Summary: Adding viewIsDescendantOf back again, more context https://github.com/facebook/react-native/commit/9ae7f0c7dac732c8c2f2253699f7bcf04943e98b This method might no not be implemented in Fabric Reviewed By: fkgozali Differential Revision: D16186406 fbshipit-source-id: 9cd4c9e20c01713d4e8608a54c6f54082067e27f
This commit is contained in:
committed by
Facebook Github Bot
parent
c242fac096
commit
458c06b8e7
@@ -100,6 +100,29 @@
|
||||
XCTAssertTrue(CGRectEqualToRect([rightView measureLayoutRelativeToAncestor:self.parentView], CGRectMake(330, 120, 100, 200)));
|
||||
}
|
||||
|
||||
- (void)testAncestorCheck
|
||||
{
|
||||
RCTShadowView *centerView = [self _shadowViewWithConfig:^(YGNodeRef node) {
|
||||
YGNodeStyleSetFlex(node, 1);
|
||||
}];
|
||||
|
||||
RCTShadowView *mainView = [self _shadowViewWithConfig:^(YGNodeRef node) {
|
||||
YGNodeStyleSetFlex(node, 1);
|
||||
}];
|
||||
|
||||
[mainView insertReactSubview:centerView atIndex:0];
|
||||
|
||||
RCTShadowView *footerView = [self _shadowViewWithConfig:^(YGNodeRef node) {
|
||||
YGNodeStyleSetFlex(node, 1);
|
||||
}];
|
||||
|
||||
[self.parentView insertReactSubview:mainView atIndex:0];
|
||||
[self.parentView insertReactSubview:footerView atIndex:1];
|
||||
|
||||
XCTAssertTrue([centerView viewIsDescendantOf:mainView]);
|
||||
XCTAssertFalse([footerView viewIsDescendantOf:mainView]);
|
||||
}
|
||||
|
||||
- (void)testAssignsSuggestedWidthDimension
|
||||
{
|
||||
[self _withShadowViewWithStyle:^(YGNodeRef node) {
|
||||
|
||||
@@ -1321,6 +1321,26 @@ RCT_EXPORT_METHOD(measureInWindow:(nonnull NSNumber *)reactTag
|
||||
}];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returs if the shadow view provided has the `ancestor` shadow view as
|
||||
* an actual ancestor.
|
||||
*/
|
||||
RCT_EXPORT_METHOD(viewIsDescendantOf:(nonnull NSNumber *)reactTag
|
||||
ancestor:(nonnull NSNumber *)ancestorReactTag
|
||||
callback:(RCTResponseSenderBlock)callback)
|
||||
{
|
||||
RCTShadowView *shadowView = _shadowViewRegistry[reactTag];
|
||||
RCTShadowView *ancestorShadowView = _shadowViewRegistry[ancestorReactTag];
|
||||
if (!shadowView) {
|
||||
return;
|
||||
}
|
||||
if (!ancestorShadowView) {
|
||||
return;
|
||||
}
|
||||
BOOL viewIsAncestor = [shadowView viewIsDescendantOf:ancestorShadowView];
|
||||
callback(@[@(viewIsAncestor)]);
|
||||
}
|
||||
|
||||
static void RCTMeasureLayout(RCTShadowView *view,
|
||||
RCTShadowView *ancestor,
|
||||
RCTResponseSenderBlock callback)
|
||||
|
||||
@@ -235,4 +235,9 @@ typedef void (^RCTApplierBlock)(NSDictionary<NSNumber *, UIView *> *viewRegistry
|
||||
*/
|
||||
- (CGRect)measureLayoutRelativeToAncestor:(RCTShadowView *)ancestor;
|
||||
|
||||
/**
|
||||
* Checks if the current shadow view is a descendant of the provided `ancestor`
|
||||
*/
|
||||
- (BOOL)viewIsDescendantOf:(RCTShadowView *)ancestor;
|
||||
|
||||
@end
|
||||
|
||||
@@ -170,6 +170,17 @@ static void RCTProcessMetaPropsBorder(const YGValue metaProps[META_PROP_COUNT],
|
||||
return (CGRect){offset, self.layoutMetrics.frame.size};
|
||||
}
|
||||
|
||||
- (BOOL)viewIsDescendantOf:(RCTShadowView *)ancestor
|
||||
{
|
||||
NSInteger depth = 30; // max depth to search
|
||||
RCTShadowView *shadowView = self;
|
||||
while (depth && shadowView && shadowView != ancestor) {
|
||||
shadowView = shadowView->_superview;
|
||||
depth--;
|
||||
}
|
||||
return ancestor == shadowView;
|
||||
}
|
||||
|
||||
- (instancetype)init
|
||||
{
|
||||
if (self = [super init]) {
|
||||
|
||||
Reference in New Issue
Block a user