[英]How to make SwiftUI view transparent or semi-transparent inside an UIView?
尽管 SwiftUI 视图在添加到 UIView 后将不透明度设置为0.5
,但它仍然具有纯色。 如果仔细观察,您可以在下方矩形的顶角看到 SwiftUI 视图的白色背景。
下面的代码将一个 UILabel 和一个 SwiftUI 矩形视图添加到根视图中,该矩形的不透明度为 0.5,因此它应该可以看到后面的文本“Test”,但它看起来像是有一个不透明的背景。
我还尝试将 SwiftUI 视图实例的父视图的背景颜色设置为 color clear
,但是,
是否可以在 UIView 中使 SwiftUI 视图透明或半透明?
import UIKit
import SwiftUI
import PlaygroundSupport
struct Foo: View {
var body: some View {
ZStack {
RoundedRectangle(cornerRadius: 18)
.fill(Color.red)
}
.background(Color.red)
.opacity(0.5)
}
}
class ViewController:UIViewController{
override func viewDidLoad() {
super.viewDidLoad()
let label = UILabel()
label.text = "TEST"
view.addSubview(label)
label.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
label.centerYAnchor.constraint(equalTo: view.centerYAnchor),
label.centerXAnchor.constraint(equalTo: view.centerXAnchor)
])
let fooView = Foo()
let controller = UIHostingController(rootView: fooView)
let subview = controller.view!
view.addSubview(subview)
view.backgroundColor = .clear
subview.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
subview.centerYAnchor.constraint(equalTo: view.centerYAnchor),
subview.centerXAnchor.constraint(equalTo: view.centerXAnchor),
subview.widthAnchor.constraint(equalToConstant: 100),
subview.heightAnchor.constraint(equalToConstant: 100)
])
}
}
let viewController = ViewController()
PlaygroundPage.current.liveView = viewController
PlaygroundPage.current.needsIndefiniteExecution = true
因为“默认情况下每个托管控制器视图都是不透明的”,所以将以下内容添加到 SwiftUI 视图可以解决这个问题。
let fooView = Foo()
let controller = UIHostingController(rootView: fooView)
let subview = controller.view!
subview.backgroundColor = .clear // <--- THIS LINE
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.