键盘扩展名中的preferredScreenEdgesDeferringSystemGestures不起作用

问题描述 投票:0回答:1

我试图在SwiftUI上进行键盘扩展。我的键盘经常使用手势。但是,位于屏幕底部附近的按键向上的手势将被识别为系统手势。就像说的那样here我尝试使用preferredScreenEdgesDeferringSystemGesturesUIInputViewController参数,但没有帮助。

这是我的代码:

class MyController<Content: View>: UIHostingController<Content>{
    open override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge{
        return [.bottom]
    }
}

class KeyboardViewController: UIInputViewController {
    @IBOutlet var nextKeyboardButton: UIButton!
    let device = Device()
    override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge{
        return [.bottom]
    }
    override func updateViewConstraints() {
        super.updateViewConstraints()
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        let setting = KeyboardSettings.Default
        let swiftUIView = SwiftUIContainer(inputObjectDelegate: self, setting: setting)
        let child = MyController(rootView: swiftUIView.environmentObject(device))
        child.setNeedsUpdateOfScreenEdgesDeferringSystemGestures()

        child.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        view.addSubview(child.view)
        addChild(child)
        let heightConstraint = NSLayoutConstraint(item: view, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: CGFloat(setting.height))
        view.addConstraint(heightConstraint)
        setNeedsUpdateOfScreenEdgesDeferringSystemGestures()
    }
}

我都尝试过,将UIHostingController覆盖为子类,并覆盖UIInputViewController。没什么帮助。键盘是否可以禁用系统底部屏幕边缘手势?

swift swiftui gesture ios-keyboard-extension
1个回答
0
投票

尝试更新。查看内联评论。

class KeyboardViewController: UIInputViewController {
    @IBOutlet var nextKeyboardButton: UIButton!
    let device = Device()
    override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge{
        return [.bottom]
    }
    override func updateViewConstraints() {
        super.updateViewConstraints()
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        let setting = KeyboardSettings.Default
        let swiftUIView = SwiftUIContainer(inputObjectDelegate: self, setting: setting)

        let child = MyController(rootView: swiftUIView.environmentObject(device))
        child.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        view.addSubview(child.view)
        addChild(child)

        let heightConstraint = NSLayoutConstraint(item: view, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: CGFloat(setting.height))
        view.addConstraint(heightConstraint)
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        setNeedsUpdateOfScreenEdgesDeferringSystemGestures() // better to call it here
    }

    // required if child controller used
    override var childForScreenEdgesDeferringSystemGestures: UIViewController? {
        return self.children.first // should be MyController, or provide explicitly
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.