如何在仅 SwiftUI 的项目中正确呈现 PKPaymentAuthorizationViewController?
Posted
技术标签:
【中文标题】如何在仅 SwiftUI 的项目中正确呈现 PKPaymentAuthorizationViewController?【英文标题】:How to properly present PKPaymentAuthorizationViewController in a SwiftUI only project? 【发布时间】:2020-06-29 12:41:51 【问题描述】:我已经访问过这个答案并且the present
method proposed here 不起作用(不再起作用了?)。当我使用 UIViewControllerRepresentable
然后将其显示为工作表时,它看起来非常糟糕:
如果我使用overlay
,它看起来就像我想要的那样,但overlay
不能从Button
触发。
这是(精简的)代码:
public struct ContentView: View
@ObservedObject var model: RootViewModel
@State private var tappedDonate = false
public var body: some View
Button(action:
tappedDonate = true
, label:
Text("Donate")
.frame(width: 300, height: 44, alignment: .center)
)
.frame(width: 300, height: 20, alignment: .center)
.padding()
.background(Color.black)
.foregroundColor(.white)
.cornerRadius(22)
.sheet(isPresented: $tappedDonate)
ApplePayWrapper(request: model.buildApplePayment())
.background(Color.clear)
public init(model: RootViewModel)
self.model = model
【问题讨论】:
您是否找到了更好的方法来做到这一点,即使在 SwiftUI 2 中也是如此?仍然没有这方面的文档或示例。 嗨@TruMan1 不,我没有,我已经放弃了这个项目,因为现在生活中同时发生了太多事情。如果您找到更好的解决方案,请告诉我 【参考方案1】:我不是 100% 相信这是最好的方法,但我设法让它在视觉上像我打算使用 ZStack
一样工作:
ZStack
Button(action:
tappedDonate = true
, label:
Text("Donate")
.frame(width: 300, height: 44, alignment: .center)
)
.frame(width: 300, height: 20, alignment: .center)
.padding()
.background(Color.black)
.foregroundColor(.white)
.cornerRadius(22)
if tappedDonate
ApplePayWrapper(request: model.buildApplePayment())
请注意,您仍然需要通过代理点击外部来连接取消按钮以及常规关闭,否则带有按钮的底层 UI 不会再次响应触摸。
【讨论】:
我也遇到了确切的问题。通过 ZStack 处理它的好发现。肯定有内存泄漏的地方。当我手动nil
退出 PK 控制器实例时,它工作得更好,但仍然不稳定。之后我可以一次又一次地打开它,但取消按钮仍然不起作用,而且事件非常不稳定。以上是关于如何在仅 SwiftUI 的项目中正确呈现 PKPaymentAuthorizationViewController?的主要内容,如果未能解决你的问题,请参考以下文章
在 SwiftUI 列表中呈现来自 Realm 的数据的正确方法是啥
在 SwiftUI 列表中呈现来自 Realm 的数据的正确方法是啥
SwiftUI:如何使用语义放置呈现多个 ToolbarItem?