SwiftUI также может вызывать бесконечный цикл, почему?

Это мой исходный код

      import SwiftUI

struct Question01: View {
    
    @State private var height: CGFloat = 0
    
    var body: some View {
        ScrollView(Axis.Set.vertical, showsIndicators: false) {
            LazyVStack
            {
                ForEach(0..<100) { _ in
                    GridentLabel(fontSize: 14, fontColor: UIColor.red, transfromColor: UIColor.black, content: "ttttttttttttttttttttbbbbbbbbbbbbbbbbbtttttttttttttttttttttttttt", transfromContent: "bbbbbbbbbbbbbbbbb", labelHeight: $height)
                        .frame(height: height)
                }
            }
        }
    }
}

struct Question01_Previews: PreviewProvider {
    static var previews: some View {
        Question01()
    }
}



struct GridentLabel: UIViewRepresentable {
    
    let fontSize: CGFloat
    let fontColor: UIColor
    let transfromColor: UIColor
    let content: String
    let transfromContent: String
    @Binding var labelHeight: CGFloat
    
    func makeUIView(context: Context) -> UILabel {
        let label = UILabel(frame: .zero)
        label.numberOfLines = 0
        label.lineBreakMode = .byWordWrapping
        label.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
        return label
    }
    
    func updateUIView(_ uiView: UILabel, context: Context) {
        if content.isEmpty == false {
            let paragraph = NSMutableParagraphStyle()
            paragraph.lineSpacing = 5.0
            paragraph.lineBreakMode = NSLineBreakMode.byCharWrapping
            let attrString = NSMutableAttributedString(string: content, attributes: [.paragraphStyle : paragraph, .font: UIFont.systemFont(ofSize: fontSize, weight: .regular), .foregroundColor: fontColor])
            let range: NSRange = (content as NSString).range(of: transfromContent)
            attrString.addAttribute(NSAttributedString.Key.foregroundColor, value: transfromColor, range: range)
            uiView.attributedText = attrString
            DispatchQueue.main.async {
                labelHeight = uiView.sizeThatFits(CGSize(width: uiView.bounds.width, height: CGFloat.greatestFiniteMagnitude)).height
            }
        }
    }
}

Почему использование фрейма коллекции LazyVstack вызывает бесконечный цикл? Я до сих пор не могу понять такую ​​проблему. Если вы используете Vstack напрямую, бесконечного цикла не будет. Почему, или если вы не установите рамку, это не вызовет бесконечного цикла. Хотя не установка рамки никак не повлияет на программу, но почему это так?

0 ответов

Другие вопросы по тегам