diff --git a/modules/bottom-sheet/ios/SheetViewController.swift b/modules/bottom-sheet/ios/SheetViewController.swift index a8b8f0c058..90d0fed0df 100644 --- a/modules/bottom-sheet/ios/SheetViewController.swift +++ b/modules/bottom-sheet/ios/SheetViewController.swift @@ -64,11 +64,14 @@ class SheetViewController: UIViewController { func updateDetents(contentHeight: CGFloat, preventExpansion: Bool) { if let sheet = self.sheetPresentationController { - sheet.animateChanges { - self.setDetents(contentHeight: contentHeight, preventExpansion: preventExpansion) - if #available(iOS 16.0, *) { - sheet.invalidateDetents() - } + // Capture `self` weakly to prevent retain cycles. + // Also, capture `sheet` weakly to avoid potential strong references held by animateChanges. + sheet.animateChanges { [weak self, weak sheet] in + guard let weakSelf = self, let weakSheet = sheet else { return } + weakSelf.setDetents(contentHeight: contentHeight, preventExpansion: preventExpansion) + if #available(iOS 16.0, *) { + weakSheet.invalidateDetents() + } } } } diff --git a/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.android.tsx b/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.android.tsx index 4652cb606b..260787d2f3 100644 --- a/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.android.tsx +++ b/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.android.tsx @@ -396,10 +396,14 @@ const ImageItem = ({ placeholderContentFit="cover" placeholder={{uri: imageSrc.thumbUri}} accessibilityLabel={imageSrc.alt} - onLoad={e => { - setHasLoaded(true) - onLoad({width: e.source.width, height: e.source.height}) - }} + onLoad={ + hasLoaded + ? undefined + : e => { + setHasLoaded(true) + onLoad({width: e.source.width, height: e.source.height}) + } + } style={{flex: 1, borderRadius}} accessibilityHint="" accessibilityIgnoresInvertColors diff --git a/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.ios.tsx b/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.ios.tsx index e6ec64c3d7..f06a59ed60 100644 --- a/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.ios.tsx +++ b/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.ios.tsx @@ -228,10 +228,14 @@ const ImageItem = ({ accessibilityHint="" enableLiveTextInteraction={showControls && !scaled} accessibilityIgnoresInvertColors - onLoad={e => { - setHasLoaded(true) - onLoad({width: e.source.width, height: e.source.height}) - }} + onLoad={ + hasLoaded + ? undefined + : e => { + setHasLoaded(true) + onLoad({width: e.source.width, height: e.source.height}) + } + } /> diff --git a/src/view/com/util/images/AutoSizedImage.tsx b/src/view/com/util/images/AutoSizedImage.tsx index b82bab8795..fe8911e31c 100644 --- a/src/view/com/util/images/AutoSizedImage.tsx +++ b/src/view/com/util/images/AutoSizedImage.tsx @@ -113,9 +113,13 @@ export function AutoSizedImage({ accessibilityIgnoresInvertColors accessibilityLabel={image.alt} accessibilityHint="" - onLoad={e => { - setFetchedDims({width: e.source.width, height: e.source.height}) - }} + onLoad={ + fetchedDims + ? undefined + : e => { + setFetchedDims({width: e.source.width, height: e.source.height}) + } + } />