@@ -403,17 +403,20 @@ export class VideoManager {
403403 if ( this . store . getState ( ) . fullscreen ) {
404404 return ;
405405 }
406- this . set ( { fullscreen : true , floating : false } ) ;
407- this . setMode ( 'fullscreen' ) ;
408406 // `enter` is often passed straight to onPress, so the argument may be a
409407 // press event — only honor real orientation values.
410408 const explicit = ORIENTATION_LOCKS . includes ( orientation as OrientationLock )
411409 ? ( orientation as OrientationLock )
412410 : undefined ;
413411 // Explicit arg (incl. 'auto' for sensor-follow) > prop > locked landscape.
414412 const lock = explicit ?? this . fullscreenOrientationDefault ?? 'landscape' ;
415- // Stored so the iOS fullscreen host can lock the Modal's supportedOrientations.
416- this . set ( { fullscreenLock : lock } ) ;
413+ // CRITICAL: set `fullscreen` and `fullscreenLock` in ONE update so the iOS
414+ // fullscreen Modal mounts with the right `supportedOrientations` from the
415+ // first render. If the Modal mounted with the default first and the lock
416+ // arrived a render later, iOS would present it portrait and never
417+ // re-rotate an already-presented modal.
418+ this . set ( { fullscreen : true , floating : false , fullscreenLock : lock } ) ;
419+ this . setMode ( 'fullscreen' ) ;
417420 NativeAuVideo . enterFullscreen ( lock ) ;
418421 this . events . emit ( 'onEnterFullscreen' , undefined ) ;
419422 }
0 commit comments