WKWebView не будет прокручивать во втором окне - PullRequest
0 голосов
/ 11 ноября 2019

Я портирую приложение для 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.

...