1

不是针对所有文本,而是针对特定长度的文本 GeometryReader 决定 Text 应该包含两行:

public var body: some View {
    ZStack {
        if loading {
            Text(text)
                .foregroundColor(.clear)
                .background(rectReader($frame))
                .fixedSize(horizontal: false, vertical: true) //Setting vertical to false - solve unwanted behaviour, but I can have multiline text and it makes multiline text single line, so I can't solve it by this way

            VStack {
                RoundedRectangle(cornerRadius: 8)
                    .frame(width: frame.width, 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)
        }
    }
    .background(Color.red)
}

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

因此:

在此处输入图像描述

但应该是:

在此处输入图像描述

正如您在第一张图片中看到的第二行错误,但在第二张图片中 - 第三行错误(多行文本)

4

1 回答 1

1

原因不在于形状,Text而在于形状。固定变体是使用 maxWidth 而不是强宽度。使用 Xcode 11.4 / iOS 13.4 测试

RoundedRectangle(cornerRadius: 8).stroke(Color.gray)
    .frame(maxWidth: frame.width).frame(height: 16)
于 2020-05-20T08:27:49.163 回答