Определите длину каждой строки в многострочном тексте
Пишу решение по замене текста на какой-то заполнитель для обновления данных.
Например из таких:
Мне нужно получить такие:
Но в настоящее время с решением:
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 строк.
Я думаю, мне нужно найти длину каждой строки текста в многострочном тексте.