Проблема с высотой строки атрибута в swiftUI - PullRequest
1 голос
/ 21 января 2020

Attributed View не обновляет макет правильно для приписанной строки Ниже мой код.

Я создал Attributed Label для SwiftUI.

import SwiftUI

class ViewLabel : UIView {
    private var label = UILabel()

    override init(frame: CGRect) {
        super.init(frame:frame)
        self.addSubview(label)
        label.numberOfLines = 0
        label.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        label.lineBreakMode = .byWordWrapping
    }

    required init?(coder: NSCoder) {
        super.init(coder: coder)
    }

    func setString(_ attributedString:NSAttributedString) {
        self.label.attributedText = attributedString
    }
}

struct AHAttributedTextLabel: UIViewRepresentable {
    var attributedString:NSAttributedString

    func makeUIView(context: Context) -> ViewLabel {
        let view = ViewLabel(frame:CGRect.zero)
        return view
    }

    func updateUIView(_ uiView: ViewLabel, context: UIViewRepresentableContext<AHAttributedTextLabel>) {
        uiView.setString(attributedString)
    }
}

struct AHAttributedLabel_Previews: PreviewProvider {
    static var previews: some View {
        AHAttributedTextLabel(attributedString: NSAttributedString(string: "Test"))
    }
}

CellView for List, который принимает 2 параметра title и subtitle

struct AHAttributtedTitleSubtitleView: View {
var title:NSAttributedString
var subTitle:String

var body: some View {
    HStack{
        VStack(alignment:.leading){

            AHAttributedTextLabel(attributedString: self.title)
                .font(Font.system(size: 14, weight: .medium, design: .default))
                .padding(.top, 10.0)
                .padding(.leading, 10.0)
                .padding(.trailing, 10.0)
                .padding(.bottom, 5.0)

            Text(self.subTitle)
                .font(Font.system(size: 14, weight: .light, design: .default))
                .padding(.leading, 10.0)
                .padding(.trailing, 10.0)
                .padding(.bottom, 10.0)
        }
    }.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .topLeading)
        .overlay(AHDashBorderView())
}

}

Просмотр содержимого, отображающий список

import SwiftUI

struct AHVitalGraphContentView: View {

    @ObservedObject var viewModel: AHVitalsGraphViewModel

    var body: some View {
            VStack{

                    List(self.viewModel.vitalGroup.vitals,id:\.vitalId) { vital in
                        AHAttributtedTitleSubtitleView(title: vital.attributedString, subTitle: vital.recorderDetails)
                    }


            }.navigationBarTitle(Text(self.viewModel.vitalGroup.latestReadings.vitalName ?? ""), displayMode: .inline)
    }
}

ниже прилагается скриншот вопросов. Вы можете видеть .... в верхней части ячейки списка.

here

...