UIKit में "होम" सिस्टम को नीचे से ऊपर की ओर स्वाइप करने का विकल्प है (पूरी तरह से अक्षम नहीं है, लेकिन स्वाइप पहली बार अनदेखा करता है और उपयोगकर्ता को इसे दोहराने के लिए मजबूर करेगा यदि वह वास्तव में इसे चाहता है)। setNeedsUpdateOfScreenEdgesDeferringSystemGestures() वास्तव में वही करता है जो मुझे चाहिए।

लेकिन मैं स्विफ्टयूआई में उसी तक कैसे पहुंचूं?

मैंने इस विधि को SceneDelegate में इस तरह कॉल करने का प्रयास किया:

        let window = UIWindow(windowScene: windowScene)
        let uiKitView = UIHostingController(rootView: contentView)
        uiKitView.setNeedsUpdateOfScreenEdgesDeferringSystemGestures()
        window.rootViewController = uiKitView

लेकिन यह काम नहीं करता है अगर आप preferredScreenEdgesDeferringSystemGestures को वापस करने के लिए .all को ओवरराइड नहीं करते हैं मैं UIHostingController की इस गणना की गई संपत्ति को ओवरराइड नहीं कर सकता:

extension UIHostingController {
    open override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge{
        return [.all];
    }
}

मुझे चेतावनी मिलती है:

सामान्य वर्ग के एक्सटेंशन में '@objc' सदस्य नहीं हो सकते हैं

किसी को पता है कि उस तक कैसे पहुंचा जाए?

1
Aspid 15 अप्रैल 2020, 00:11

1 उत्तर

सबसे बढ़िया उत्तर

कस्टम होस्टिंग नियंत्रकों में बस इसे ओवरराइड करें

class MyHostingController<Content: View>: UIHostingController<Content> {
    open override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge{
        return [.all];
    }
}

और इसे रूट कंट्रोलर के रूप में उपयोग करें

let window = UIWindow(windowScene: windowScene)

let controller = MyHostingController(rootView: contentView)
controller.setNeedsUpdateOfScreenEdgesDeferringSystemGestures()

window.rootViewController = controller
3
Asperi 15 अप्रैल 2020, 04:29