簡體   English   中英

iPadOS - Safari 擴展中的 SwiftUI 未正確呈現

[英]iPadOS - SwiftUI in a Safari Extension Not Rendering Properly

我正在編寫一個簡單的憑證自動填充擴展,作為在 iOS 上玩 SwiftUI 的一種方式。 但是,我發現在 iPadOS 上 SwiftUI View無法正確呈現。 我的CredentialProviderViewController在擴展生命周期開始時被調用,並負責加載 SwiftUI View 它看起來像這樣:

class CredentialProviderViewController: ASCredentialProviderViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    override func prepareCredentialList(for serviceIdentifiers: [ASCredentialServiceIdentifier]) {
        let services: [String] = serviceIdentifiers.map { $0.identifier }
        let autofillView = AutofillView(services: services,
                                        extensionContext: self.extensionContext)
        
        let vc = UIHostingController(rootView: autofillView)
        vc.view.translatesAutoresizingMaskIntoConstraints = false
        vc.view.frame = view.bounds
        
        view.addSubview(vc.view)
        addChild(vc)
    }
}

我的 SwiftUI AutofillView非常簡單,看起來像這樣:

struct AutofillView: View {
    
    let services: [String]
    var extensionContext: ASCredentialProviderExtensionContext? = nil

    var body: some View {
        NavigationView {
            Text("LOCK SCREEN")
        }
    }
}

在 iPhone 上,這完全符合我的預期,當擴展加載時,“鎖屏”字樣出現在View的中心。 但是,在 iPad 上, View以模態 window 顯示,並且內容未正確呈現。 事實上,只顯示了最輕微的“L”。 (見截圖)

在此處輸入圖像描述

我確定我遺漏了一些東西或沒有正確實例化我的 SwiftUI View 我只是不確定在哪里。 有什么想法嗎?

與其將其添加到容器視圖或子視圖中,不如將 UIHostingController 呈現為視圖 controller

let services: [String] = serviceIdentifiers.map { $0.identifier }
let autofillView = AutofillView(services: services,
                                    extensionContext: self.extensionContext)
let vc = UIHostingController(rootView: autofillView)
vc.modalPresentationStyle = .fullScreen
self.present(vc, animated: false)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM