【发布时间】:2021-01-19 12:59:27
【问题描述】:
尽管 SwiftUI 视图在添加到 UIView 后将不透明度设置为 0.5,但它仍然具有纯色。如果你仔细观察,你可以在下面的矩形的顶角看到 SwiftUI 视图的白色背景。
下面的代码在根视图中添加了一个 UILabel 和一个 SwiftUI 矩形视图,矩形的不透明度为 0.5,因此它应该可以看穿它后面的文本“Test”,但它看起来像是有一个不透明的背景。
我也尝试过将 SwiftUI 视图实例的父视图的背景颜色设置为颜色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
【问题讨论】:
-
这是否回答了您的问题stackoverflow.com/a/63745596/12299030?
-
感谢@Asperi,但就我而言,Card SwiftUI 视图位于 UIKit UIView 中。
-
@Asperi 我为这个问题添加了一个可重现的 Playground sn-p。
-
是的,这个答案提示我将背景更改为
.clear。