From 03acf57b767553acbee4ff589055fbd239ffffbb Mon Sep 17 00:00:00 2001 From: Mehdi Mulani Date: Thu, 24 Oct 2019 10:33:07 -0700 Subject: [PATCH] Fix use of safeAreaInsets for old versions of iOS Summary: This would cause a crash on iOS 9.3 because this method does not exist on UIView on that platform. By wrapping it in an availability check, we provide some safety. Changelog: [iOS] [Fixed] safeAreaInsets call would crash on older versions of iOS Reviewed By: fkgozali Differential Revision: D18118025 fbshipit-source-id: fb7e517b3bcb3e0ba11ae81d8bf8397abc227e04 --- .../SafeAreaView/RCTSafeAreaViewComponentView.mm | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/React/Fabric/Mounting/ComponentViews/SafeAreaView/RCTSafeAreaViewComponentView.mm b/React/Fabric/Mounting/ComponentViews/SafeAreaView/RCTSafeAreaViewComponentView.mm index c8eef6c4102..fa016edbaa8 100644 --- a/React/Fabric/Mounting/ComponentViews/SafeAreaView/RCTSafeAreaViewComponentView.mm +++ b/React/Fabric/Mounting/ComponentViews/SafeAreaView/RCTSafeAreaViewComponentView.mm @@ -49,16 +49,25 @@ static UIScrollView *findScrollView(UIView *view, uint recursionDepth = 0) return self; } +- (UIEdgeInsets)_safeAreaInsets +{ + if (@available(iOS 11.0, tvOS 11.0, *)) { + return self.safeAreaInsets; + } + + return UIEdgeInsetsZero; +} + - (void)layoutSubviews { [super layoutSubviews]; UIScrollView *scrollView = findScrollView(self); if (scrollView && CGSizeEqualToSize(scrollView.bounds.size, self.bounds.size)) { - [scrollView setContentInset:self.safeAreaInsets]; + [scrollView setContentInset:self._safeAreaInsets]; } else { if (_state != nullptr) { CGSize size = self.bounds.size; - size.height -= self.safeAreaInsets.bottom; + size.height -= self._safeAreaInsets.bottom; auto newState = SafeAreaViewState{RCTSizeFromCGSize(size)}; _state->updateState(std::move(newState)); }