From 740efd146aa5c324dd5866d225a03cc25e3bb7a0 Mon Sep 17 00:00:00 2001 From: Sorin Cioban Date: Sun, 31 May 2026 22:50:04 +0100 Subject: [PATCH] Fix iOS player view controller containment --- ios/Video/RCTVideo.swift | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/ios/Video/RCTVideo.swift b/ios/Video/RCTVideo.swift index 5f2f5f668b..7695566501 100644 --- a/ios/Video/RCTVideo.swift +++ b/ios/Video/RCTVideo.swift @@ -1109,7 +1109,8 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH if let playerViewController = _playerViewController { if _controls { // prevents crash https://github.com/TheWidlarzGroup/react-native-video/issues/3040 - self._playerViewController?.removeFromParent() + playerViewController.willMove(toParent: nil) + playerViewController.removeFromParent() } viewController.present(playerViewController, animated: true, completion: { [weak self] in @@ -1190,6 +1191,9 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH _playerViewController.view.topAnchor.constraint(equalTo: self.topAnchor), _playerViewController.view.bottomAnchor.constraint(equalTo: self.bottomAnchor), ]) + if let viewController { + _playerViewController.didMove(toParent: viewController) + } } _playerObserver.playerViewController = _playerViewController @@ -1256,6 +1260,7 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH } } else { DispatchQueue.main.async { + self._playerViewController?.willMove(toParent: nil) self._playerViewController?.view.removeFromSuperview() self._playerViewController?.removeFromParent() self._playerViewController = nil @@ -1455,6 +1460,7 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH self.removePlayerLayer() if let _playerViewController { + _playerViewController.willMove(toParent: nil) _playerViewController.view.removeFromSuperview() _playerViewController.removeFromParent() _playerViewController.rctDelegate = nil