Dynamically change device orientation, and lock to that orientation

I am new to Swift and iOS development. I am trying to wrap a web app where the orientation is dependent on the URL. I have the code working with Stack Overflow as an example where "https://stackoverflow.com" displays in portrait and all other pages change to landscape after being loaded. I have a URL observer that triggers when the URL changes and calls requestGeometryUpdate. I'm running into the following problem:

When changing the orientation with requestGeometryUpdate, the orientation changes, but if the device is physically rotated after the change, the orientation changes again. I would like to make the orientation change locked and permanent until a new page is loaded.

Any help would be much appreciated. My code is below:

import SwiftUI
import WebKit

struct TestView: View {
    private let urlString: String = "https://stackoverflow.com/"
    var body: some View {
        TestWebView(url: URL(string: urlString)!)
            .background(Color.black)
            .scrollIndicators(.hidden)
            .ignoresSafeArea([.all])//stretchs webview over notch on iphone
            .defersSystemGestures(on:.bottom)//deprioritizes multitasking indicator
            .statusBar(hidden: true)//hides time and battery
    }
}

class TestController: UIViewController {
    var webview: WKWebView!
    var webViewURLObserver: NSKeyValueObservation?
    
    override func viewDidLoad() {
        super.viewDidLoad()

        let winScene = UIApplication.shared.connectedScenes.first
        let windowScene = winScene as! UIWindowScene
        
        webview = WKWebView(frame: self.view.frame)
        webview.autoresizingMask = [.flexibleWidth,.flexibleHeight]//makes webview fit screen in portrait and landscape

        self.view.addSubview(self.webview)

        webViewURLObserver = self.webview.observe(\.url, options: .new) { webview, change in
            let url=change.newValue!!;//! converts from optional to string
            print(url)
            let arr = url.absoluteString.split(separator: "stackoverflow.com").map(String.init)
            var portrait=false
            if(arr.count>1){
                let path = arr[1];
                if path=="/"{
                    portrait=true
                }
            }
            
            if portrait==true {
                windowScene.requestGeometryUpdate(.iOS(interfaceOrientations: .portrait)) { error in print(error)}
            }
            else{
                windowScene.requestGeometryUpdate(.iOS(interfaceOrientations: .landscape)) { error in print(error)}
            }
            self.setNeedsUpdateOfSupportedInterfaceOrientations()
        }
    }
}

// WebView Struct
struct TestWebView: UIViewControllerRepresentable {
    let url: URL

    func makeUIViewController(context: Context) -> TestController {
        let webviewController = TestController()
        return webviewController
    }

    func updateUIViewController(_ webviewController: TestController, context: Context) {
        let request = URLRequest(url: url)
        webviewController.webview.scrollView.contentInsetAdjustmentBehavior = .never
        webviewController.webview.load(request)
    }
}

struct TestView_Previews: PreviewProvider {
    static var previews: some View {
        TestView()
    }
}

In RealityKit and in Mixed Reality apps in general, the iPhone screen serves as a viewport onto virtual object anchored to a scene. Currently the user can rotate along the X and Y axis and the programmer can use Gyro to adjust viewport. But rotating along Z axis triggers a Landscape/Portrait animation which is very jarring to the user. So, preventing that animation is crucial for a seamless UX.

One possible way to enable is to switch

UIApplication.shared.connectedScenes.first?.effectiveGeometry.interfaceOrientation  

from readonly to readwrite. I think that might work. But, that would be an API change. Better yet, is there something that we can do today?

Dynamically change device orientation, and lock to that orientation
 
 
Q