[英]How to ignore SwiftUI modal background, or make modal background clear/transparent?
Currently we get a free opaque white/black background for swiftUI modal.目前,我们为 swiftUI 模式获得了一个免费的不透明白色/黑色背景。 Is there anyway to remove the free opaque color and make the modal view transparent?
无论如何要删除自由的不透明颜色并使模态视图透明?
In the image below, the end result should be able to see the image even with modal presented.在下图中,即使呈现模态,最终结果也应该能够看到图像。
based on this code snippet you can create viewcontroller
extension and modify your presentation.基于此代码片段,您可以创建
viewcontroller
扩展并修改您的演示文稿。 here is modified code:这是修改后的代码:
struct ViewControllerHolder {
weak var value: UIViewController?
init(_ value: UIViewController?) {
self.value = value
}
}
struct ViewControllerKey: EnvironmentKey {
static var defaultValue: ViewControllerHolder { return ViewControllerHolder(UIApplication.shared.windows.first?.rootViewController ) }
}
extension EnvironmentValues {
var viewController: ViewControllerHolder {
get { return self[ViewControllerKey.self] }
set { self[ViewControllerKey.self] = newValue }
}
}
extension UIViewController {
func present<Content: View>(presentationStyle: UIModalPresentationStyle = .automatic, transitionStyle: UIModalTransitionStyle = .coverVertical, animated: Bool = true, completion: @escaping () -> Void = {}, @ViewBuilder builder: () -> Content) {
let toPresent = UIHostingController(rootView: AnyView(EmptyView()))
toPresent.modalPresentationStyle = presentationStyle
toPresent.rootView = AnyView(
builder()
.environment(\.viewController, ViewControllerHolder(toPresent))
)
toPresent.view.backgroundColor = .clear // This line is modified
self.present(toPresent, animated: animated, completion: completion)
}
}
Your SwiftUI ContentView:您的 SwiftUI 内容视图:
struct ContentView: View {
@Environment(\.viewController) private var viewControllerHolder: ViewControllerHolder
private var viewController: UIViewController? {
self.viewControllerHolder.value
}
var body: some View {
ZStack {
Color.red
Button(action: {
self.viewController?.present(builder: {
Text("OK")
})
}) {
Text("Present me!")
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.