Ok, I went back and forth on OOper's advice, and after repeated errors I finally came across the right combination, by accident.
GameViewController launches the scene GameScene, which respects the constraints/safeAreaLayouts.
However, it's a mish-mash of using myView and view. While it works, am not sure why, because reading it kind of seems disjointed. I get the constraints from view, but launch from the sub-view myView. Am I getting lucky? Or is this bound to crash?
import UIKit
import SpriteKit
import GameplayKit
var myGlobalVars = GlobalVars(backGround: SKSpriteNode(),
															pegHolder: SKSpriteNode(), currentNode: SKSpriteNode(),
															widthPoints: 0.0, heightPoints: 0.0,
															widthPixels: 0.0, heightPixels: 0.0, passGo: false, sceneRect: .zero, fileName: " ")
class GameViewController: UIViewController {
		private let myView : UIView = {
				let myView = UIView()
				myView.translatesAutoresizingMaskIntoConstraints = false
				myView.backgroundColor = .clear
				return myView
		}()
		
		private func addConstraints(){
				var constraints = [NSLayoutConstraint]()
				
				constraints.append(myView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor))
				constraints.append(myView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor))
				constraints.append(myView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor))
				constraints.append(myView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor))
				
				NSLayoutConstraint.activate(constraints)
		}
		
		override func viewDidLayoutSubviews() {
				super.viewDidLayoutSubviews()
				let topSafeArea: CGFloat
				let bottomSafeArea: CGFloat
				if #available(iOS 11.0, *) {
						topSafeArea = view.safeAreaInsets.top
						bottomSafeArea = view.safeAreaInsets.bottom
				} else {
						topSafeArea = topLayoutGuide.length
						bottomSafeArea = bottomLayoutGuide.length
				}
		}
		let logo = UIImage(named: "startup")
		override func viewDidLoad() {
				super.viewDidLoad()
				view.addSubview(myView)
				addConstraints()
				
				if let view = self.view as! SKView?
				{
						
						myGlobalVars.widthPixels = UIScreen.main.nativeBounds.width
						myGlobalVars.heightPixels = UIScreen.main.nativeBounds.height
						myGlobalVars.widthPoints = UIScreen.main.bounds.width
						myGlobalVars.heightPoints = UIScreen.main.bounds.height
						var scene : GameScene!
						DispatchQueue.main.async { [self] in
										 scene = GameScene(size: CGSize(width: myView.frame.width,
																											 height: myView.frame.height))
						scene.anchorPoint = CGPoint(x: 0.0, y: 0.0)
								scene.backgroundColor = .clear
								scene.scaleMode = .aspectFit
								myGlobalVars.sceneRect = scene.frame
								myGlobalVars.gameScene = scene
								view.isHidden = false
								view.presentScene(scene)
						}
						myGlobalVars.passGo = true
						
						view.ignoresSiblingOrder = true
						view.showsFPS = true
						view.showsNodeCount = true
				}
		}
		
		override var shouldAutorotate: Bool {
				return false
		}
		override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
				if UIDevice.current.userInterfaceIdiom == .phone {
						return .allButUpsideDown
				} else {
						return .all
				}
		}
		override var prefersStatusBarHidden: Bool {
				return false
		}
}