mirror of
https://github.com/status-im/react-native.git
synced 2025-01-10 09:35:48 +00:00
d2c569795c
Summary: No code changes, no testing required. alligned -> aligned allignment -> alignment completly -> completely conseptually -> conceptually decendents -> descendants indefinetly -> indefinitely dimention -> dimension doesnt -> doesn't safegaurd -> safeguard intialization -> initialization hierachy -> hierarchy happend -> happened gaurd -> guard programatically -> programmatically initalized -> initialized immidiately -> immediately occured -> occurred unkown -> unknown neccessary -> necessary neccesarily -> necessarily occuring -> occurring comoponent -> component propogate -> propagate recieved -> received referece -> reference perfomance -> performance recieving -> receiving subsquently -> subsequently scoll -> scroll suprisingly -> surprisingly targetting -> targeting tranform -> transform symetrical -> symmetrical wtih -> with Closes https://github.com/facebook/react-native/pull/17578 Differential Revision: D6718791 Pulled By: shergin fbshipit-source-id: 4ab79c1131ec5971d35a0c7199eba7ec0a0918ad
56 lines
1.7 KiB
Objective-C
56 lines
1.7 KiB
Objective-C
/**
|
|
* Copyright (c) 2015-present, Facebook, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the BSD-style license found in the
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
*/
|
|
|
|
#import "RCTScrollContentShadowView.h"
|
|
|
|
#import <yoga/Yoga.h>
|
|
|
|
#import "RCTUtils.h"
|
|
|
|
@interface RCTShadowView () {
|
|
// This will be removed after t15757916, which will remove
|
|
// side-effects from `setFrame:` method.
|
|
@public CGRect _frame;
|
|
}
|
|
@end
|
|
|
|
@implementation RCTScrollContentShadowView
|
|
|
|
- (void)applyLayoutNode:(YGNodeRef)node
|
|
viewsWithNewFrame:(NSMutableSet<RCTShadowView *> *)viewsWithNewFrame
|
|
absolutePosition:(CGPoint)absolutePosition
|
|
{
|
|
// Call super method if LTR layout is enforced.
|
|
if (YGNodeLayoutGetDirection(self.yogaNode) != YGDirectionRTL) {
|
|
[super applyLayoutNode:node
|
|
viewsWithNewFrame:viewsWithNewFrame
|
|
absolutePosition:absolutePosition];
|
|
return;
|
|
}
|
|
|
|
// Motivation:
|
|
// Yoga place `contentView` on the right side of `scrollView` when RTL layout is enfoced.
|
|
// That breaks everything; it is completely pointless to (re)position `contentView`
|
|
// because it is `contentView`'s job. So, we work around it here.
|
|
|
|
// Step 1. Compensate `absolutePosition` change.
|
|
CGFloat xCompensation = YGNodeLayoutGetRight(node) - YGNodeLayoutGetLeft(node);
|
|
absolutePosition.x += xCompensation;
|
|
|
|
// Step 2. Call super method.
|
|
[super applyLayoutNode:node
|
|
viewsWithNewFrame:viewsWithNewFrame
|
|
absolutePosition:absolutePosition];
|
|
|
|
// Step 3. Reset the position.
|
|
_frame.origin.x = RCTRoundPixelValue(YGNodeLayoutGetRight(node));
|
|
}
|
|
|
|
@end
|