Fabric: Use padding instead of size for SafeAreaView
Summary: Use padding instead of setting size of SafeAreaView, this should make it more consistent with Paper component. changelog: [internal] Reviewed By: shergin Differential Revision: D18225793 fbshipit-source-id: 08dccbdae0e4f7a7847501a06e17d4c26473462a
This commit is contained in:
Родитель
cd1abb3bca
Коммит
a82ebeb6f3
|
@ -13,27 +13,6 @@
|
|||
|
||||
using namespace facebook::react;
|
||||
|
||||
static UIScrollView *findScrollView(UIView *view, uint recursionDepth = 0)
|
||||
{
|
||||
if (recursionDepth >= 3) {
|
||||
return NULL;
|
||||
}
|
||||
if ([view isKindOfClass:[UIScrollView class]]) {
|
||||
return (UIScrollView *)view;
|
||||
}
|
||||
|
||||
if (view.subviews.count >= 1) {
|
||||
for (UIView *subview in view.subviews) {
|
||||
UIScrollView *scrollView = findScrollView(subview.subviews.firstObject, recursionDepth + 1);
|
||||
if (scrollView) {
|
||||
return scrollView;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@implementation RCTSafeAreaViewComponentView {
|
||||
SafeAreaViewShadowNode::ConcreteState::Shared _state;
|
||||
}
|
||||
|
@ -61,17 +40,15 @@ static UIScrollView *findScrollView(UIView *view, uint recursionDepth = 0)
|
|||
- (void)layoutSubviews
|
||||
{
|
||||
[super layoutSubviews];
|
||||
UIScrollView *scrollView = findScrollView(self);
|
||||
if (scrollView && CGSizeEqualToSize(scrollView.bounds.size, self.bounds.size)) {
|
||||
[scrollView setContentInset:self._safeAreaInsets];
|
||||
} else {
|
||||
}
|
||||
|
||||
- (void)safeAreaInsetsDidChange
|
||||
{
|
||||
[super safeAreaInsetsDidChange];
|
||||
if (_state != nullptr) {
|
||||
CGSize size = self.bounds.size;
|
||||
size.height -= self._safeAreaInsets.bottom;
|
||||
auto newState = SafeAreaViewState{RCTSizeFromCGSize(size)};
|
||||
auto newState = SafeAreaViewState{RCTEdgeInsetsFromUIEdgeInsets(self._safeAreaInsets)};
|
||||
_state->updateState(std::move(newState));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - RCTComponentViewProtocol
|
||||
|
|
|
@ -35,12 +35,7 @@ class SafeAreaViewComponentDescriptor final
|
|||
shadowNode->getState());
|
||||
auto stateData = state->getData();
|
||||
|
||||
if (stateData.safeAreaSize.width != 0 &&
|
||||
stateData.safeAreaSize.height != 0) {
|
||||
layoutableShadowNode->setSize(
|
||||
Size{stateData.safeAreaSize.width, stateData.safeAreaSize.height});
|
||||
layoutableShadowNode->setPositionType(YGPositionTypeAbsolute);
|
||||
}
|
||||
layoutableShadowNode->setPadding(stateData.padding);
|
||||
|
||||
ConcreteComponentDescriptor::adopt(shadowNode);
|
||||
}
|
||||
|
|
|
@ -19,10 +19,10 @@ class SafeAreaViewState final {
|
|||
public:
|
||||
using Shared = std::shared_ptr<const SafeAreaViewState>;
|
||||
|
||||
SafeAreaViewState(){};
|
||||
SafeAreaViewState(Size screenSize_) : safeAreaSize(screenSize_){};
|
||||
SafeAreaViewState() = default;
|
||||
SafeAreaViewState(EdgeInsets padding_) : padding(padding_){};
|
||||
|
||||
const Size safeAreaSize{};
|
||||
const EdgeInsets padding{};
|
||||
|
||||
#pragma mark - Getters
|
||||
};
|
||||
|
|
|
@ -138,6 +138,18 @@ void YogaLayoutableShadowNode::setSize(Size size) const {
|
|||
yogaNode_.setDirty(true);
|
||||
}
|
||||
|
||||
void YogaLayoutableShadowNode::setPadding(RectangleEdges<Float> padding) const {
|
||||
ensureUnsealed();
|
||||
|
||||
auto style = yogaNode_.getStyle();
|
||||
style.padding()[YGEdgeTop] = yogaStyleValueFromFloat(padding.top);
|
||||
style.padding()[YGEdgeLeft] = yogaStyleValueFromFloat(padding.left);
|
||||
style.padding()[YGEdgeRight] = yogaStyleValueFromFloat(padding.right);
|
||||
style.padding()[YGEdgeBottom] = yogaStyleValueFromFloat(padding.bottom);
|
||||
yogaNode_.setStyle(style);
|
||||
yogaNode_.setDirty(true);
|
||||
}
|
||||
|
||||
void YogaLayoutableShadowNode::setPositionType(
|
||||
YGPositionType positionType) const {
|
||||
ensureUnsealed();
|
||||
|
|
|
@ -69,6 +69,8 @@ class YogaLayoutableShadowNode : public LayoutableShadowNode,
|
|||
*/
|
||||
void setSize(Size size) const;
|
||||
|
||||
void setPadding(RectangleEdges<Float> padding) const;
|
||||
|
||||
/**
|
||||
* Sets position type of Yoga node (relative, absolute).
|
||||
*/
|
||||
|
|
Загрузка…
Ссылка в новой задаче