首页 > 解决方案 > 在 UIKit 中呈现 ViewController 时,SwiftUI 文本消失

问题描述

如果标题不够清晰,请见谅。我使用 SwiftUI 创建了一个条形图,并使用 UIHostingController 将其添加到使用 UIKit 制作的视图控制器中。当我第一次启动应用程序时,所有文本都显示出来,一切似乎都正常,但是当我展示另一个视图控制器并返回初始视图控制器时,SwiftUI 文本没有出现,你只能看到条形图,查看我添加的视频以获得更好的理解。

这是条形图的代码LineChart.swift

struct LineChart: View {
    
    let wordsWrittenArray = [40, 80, 150, 90, 75, 180, 50]
    let days = ["Su", "M", "T", "W", "Th", "F", "Sa"]
    let totalWordCount = 400
    
    var body: some View {
        
        VStack {
            Text("Word Count")
                .font(.system(size: 34))
                .fontWeight(.heavy)
                .foregroundColor(Color(Colors.backgroundOppositeColor!))
            
            HStack (spacing: 23) {
                ForEach(0 ..< wordsWrittenArray.count) { index in
                    Bar(wordsWritten: CGFloat(wordsWrittenArray[index]), days: days[index])
                }
            }
            
            Text("\(totalWordCount) Words")
                .font(.system(size: 34))
                .fontWeight(.heavy)
                .foregroundColor(Color(Colors.backgroundOppositeColor!))
                .padding(.top, 15)
        }
    }
}

// Create a struct for the bars
struct Bar: View {
    
    var wordsWritten: CGFloat
    var days: String
    
    var body: some View {
        VStack {
            ZStack(alignment: .bottom) {
                
                Capsule().frame(width: 25, height: 180)
                    .foregroundColor(Color(Colors.backgroundOppositeColor!))
                Capsule().frame(width: 25, height: wordsWritten)
                    .foregroundColor(Color(Colors.themeColor!))
            }
            Text(days).padding(.top, 8)
                .foregroundColor(Color(Colors.backgroundOppositeColor!))
        }
    }
}

这是我在视图控制器MainScreen.swift中使用 UIHostingController 的代码:

// Setup the SwiftUI Bar Chart View
func setupBarChartView() {
        
    let barChartView = UIHostingController(rootView: LineChart())
    self.addChild(barChartView)
    view.addSubview(barChartView.view)
    barChartView.didMove(toParent: self)
    barChartView.view.backgroundColor = .clear
        
    barChartView.view.translatesAutoresizingMaskIntoConstraints = false
    barChartView.view.topAnchor.constraint(equalTo: featuredStoryView.bottomAnchor, constant: 30).isActive = true
    barChartView.view.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
        barChartView.view.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
    barChartView.view.bottomAnchor.constraint(equalTo: notificationButton.topAnchor, constant: -25).isActive = true
}

这是视频:

视频

感谢您的反馈!

标签: swiftswiftuiuikit

解决方案


推荐阅读