首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GeometryReader使文本高度错误

GeometryReader使文本高度错误
EN

Stack Overflow用户
提问于 2020-05-20 07:58:16
回答 1查看 742关注 0票数 1

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

代码语言:javascript
复制
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))
    }
}

因此:

但应该是:

您可以在第一张图片中看到错误的第二行,但在第二张图像中看到错误的第三行(多行文本)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-20 08:27:49

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

代码语言:javascript
复制
RoundedRectangle(cornerRadius: 8).stroke(Color.gray)
    .frame(maxWidth: frame.width).frame(height: 16)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61907939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档