Определите длину каждой строки в многострочном тексте

Пишу решение по замене текста на какой-то заполнитель для обновления данных.

Например из таких:

Мне нужно получить такие:

Но в настоящее время с решением:

public struct ShimmerText: View {

private var text: String
@Binding private var loading: Bool
@State private var frame = CGRect.zero
private var accessibilityIdentifier: String

public init(text: String,
            loading: Binding<Bool>,
            accessibilityIdentifier: String) {
    self.text = text
    self._loading = loading
    self.accessibilityIdentifier = accessibilityIdentifier
}

public var body: some View {
    ZStack {
        if loading {
            Text(text)
                .foregroundColor(.clear)
                .background(rectReader($frame))
                .fixedSize(horizontal: false, vertical: true)

            VStack {
                RoundedRectangle(cornerRadius: 8)
                    .frame(maxWidth: frame.width)
                    .frame(height: 16)
                    .foregroundColor(.colorDivider)

                if frame.height > 24 {
                    RoundedRectangle(cornerRadius: 8)
                        .frame(width: frame.width, height: 16)
                        .foregroundColor(.colorDivider)
                }
            }
        } else {
            Text(text)
                .accessibility(identifier: accessibilityIdentifier)
                .fixedSize(horizontal: false, vertical: true)
        }
    }
}

func rectReader(_ binding: Binding<CGRect>) -> some View {
    return GeometryReader { geometry -> Color in
        let rect = geometry.frame(in: .global)
        DispatchQueue.main.async {
            binding.wrappedValue = rect
        }
        return .clear
    }
}

Я могу получить только:

Вы можете видеть, что последние две строки заполнителя имеют длину максимальной строки, но должны повторять длину каждой строки. Также текст может быть длиннее 3 строк.

Я думаю, мне нужно найти длину каждой строки текста в многострочном тексте.

0 ответов

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