swiftui - MFMessageComposeViewController + SwiftUI 错误行为

标签 swiftui mfmailcomposeviewcontroller mfmessagecomposeviewcontroller uiviewrepresentable uiviewcontrollerrepresentable

我正在使用 ViewControllerRepresentable 来呈现 MFMessageComposeViewController,以便用户可以从我的应用程序发送文本。

但是,每次呈现 View 时,都会出现很多错误 - 元素随机消失,滚动关闭,屏幕闪烁。在 iOS 14.2 和 14.3 上测试。

代码如下:

import SwiftUI
import MessageUI

struct MessageView: UIViewControllerRepresentable {
    var recipient: String
    
    class Coordinator: NSObject, MFMessageComposeViewControllerDelegate {
        var completion: () -> Void
        init(completion: @escaping ()->Void) {
            self.completion = completion
        }
        
        // delegate method
        func messageComposeViewController(_ controller: MFMessageComposeViewController,
                                   didFinishWith result: MessageComposeResult) {
            controller.dismiss(animated: true, completion: nil)
            completion()
        }
    }

    func makeCoordinator() -> Coordinator {
        return Coordinator() {} // not using completion handler
    }
    
    func makeUIViewController(context: Context) -> MFMessageComposeViewController {
        let vc = MFMessageComposeViewController()
        vc.recipients = [recipient]

        vc.messageComposeDelegate = context.coordinator
        return vc
    }
    
    func updateUIViewController(_ uiViewController: MFMessageComposeViewController, context: Context) {}
    
    typealias UIViewControllerType = MFMessageComposeViewController
}

我的观点

struct ContentView: View {
    @State private var isShowingMessages = false
    @State var result: Result<MFMailComposeResult, Error>? = nil
    var body: some View {
        VStack {
            Button("Show Messages") {
                self.isShowingMessages = true
            }
            .sheet(isPresented: self.$isShowingMessages) {
            MessageView(recipient: "+15555555555")
        }
            .edgesIgnoringSafeArea(.bottom)
        }
    }
}

我表达这个观点的方式有问题吗?有没有其他人经历过这种行为?类似的行为发生在 MFMailComposeViewController 上,但没有那么多问题。

最佳答案

5 分钟后,我意识到我需要在展示表格时添加:

MessageView(recipient: "+15555555555")
    .ignoresSafeArea()

该 View 看起来有问题,因为它试图解释键盘安全区域并且很难做到。

关于swiftui - MFMessageComposeViewController + SwiftUI 错误行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65660858/

相关文章:

ios - 如何在不使用 MFMessageComposeViewController 的情况下在我的 iOS 应用程序中发送短信?

navigation - 如何在 SwiftUI 中使用带有条件检查的按钮进行导航

ios - 关闭 MFMailComposeViewController 的正确方法

ios - 通过 IBAction (Objective-C) 直接发送短信

iphone - MFMailComposeViewController 模型不显示

ios - 为什么 MFMailComposeViewController 在应用程序内发送电子邮件时不会关闭?

ios - 显示带有隐藏键盘的 MFMessageComposeViewController

ios - 在 SwiftUI 中的 Form 上捕捉点击手势

ios - 从 Swift 中的闭包返回多个 View 对象

swift - 将数据从简单的 NSView 传递到 SwiftUI View