我正在将iPad应用程序移植到Maccatalyst。我可以以编程方式启动第二个“窗口”,并将WKWebView作为子视图添加到它(我的帮助屏幕)。显示内容的顶部以及滚动指示符。但是,没有鼠标或键盘操作可以滚动。如果实际上是问题所在,则不确定如何在两个窗口之间转移“焦点”。生成WKWebView及其所有设置的代码与iPad版本的代码相同。
更新
在SceneDelegate中-
import Foundation
import Cartography
class HelpSceneDelegate: UIResponder,UISceneDelegate {
var window: UIWindow?
var helpSession: UIScenesession?
func scene(_ scene: UIScene,willConnectTo session: UIScenesession,options connectionOptions: UIScene.ConnectionOptions) {
guard let sceneWindow = (scene as? UIWindowScene) else { return }
helpSession = session
window = UIWindow(frame: sceneWindow.coordinateSpace.bounds)
window?.windowScene = sceneWindow
window?.backgroundColor = .white
window?.rootViewController = ViewController()
window?.makeKeyAndVisible()
createHelp()
}
func createHelp() {
let app = UIApplication.shared.delegate as! AppDelegate
app.infoWebViewVC!.loadView()
delay(0.30) {
app.infoWebViewVC?.viewDidLoad()
app.infoWebViewVC?.infoWebView?.alpha = 1.0
let webView = app.infoWebViewVC!.infoWebView!
self.window?.addSubview(webView)
let backButton = UIButton(frame: CGRect(0,50,20,20))
backButton.setImage(#imageLiteral(resourceName: "back_filled"),for: .normal)
backButton.addTarget(self,action: #selector(self.onBack),for: .touchUpInside)
self.window?.addSubview(backButton)
constrain(webView,backButton) { w,b in
w.top == w.superview!.safeAreaLayoutGuide.top + 20
w.bottom == w.superview!.safeAreaLayoutGuide.bottom - 20
w.centerX == w.superview!.centerX
w.width == w.superview!.width*0.75
b.centerY == w.superview!.centerY
b.leading == b.superview!.safeAreaLayoutGuide.leading + 5
b.width == 40
b.height == 40
}
}
}
@objc
func onBack(_ sender: UIButton) -> () {
UIApplication.shared.requestScenesessionDestruction(helpSession!,options: nil)
}
如果将createHelp()
放在window?.makeKeyAndVisible()
之前,则窗口不会响应任何事件(触摸按钮或滚动)。请注意如何在UIScene世界中关闭窗口。我正在使用制图来管理布局。在迁移到SwiftUI时,投入了太多资金。