繁体   English   中英

如何在 UIView 中使 SwiftUI 视图透明或半透明?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM