我有一个有背景的Text(这只是一个彩色气泡),我试图将它的maxWidth限制在某个宽度,比如本例中的200.

我遇到了.frame(..., maxWidth: ...)美元的问题.

预期行为

enter image description here

  • 较小的消息有多大就有多大
  • 较大的消息的宽度最大为maxWidth,并且文本不会被截断

实际行为

  • 无论应用.background().frame()修改器的顺序是什么,Text总是按照我设置的maxWidth绘制.

更详细地说: 一百零二

Text(...)
    .fixedSize(horizontal: false, vertical: true)
    .background(
        Rectangle()               
    )
                    
    .frame(maxWidth: 200)

enter image description here

这导致了所有Text的帧的宽度是200-这是我不理解的.我知道之前应用了背景,所以背景大小是正确的,但为什么边框变成了最大宽度?我是不是误解了maxWidth: 帧的工作原理?

这种行为在没有.fixedSize()修饰符的情况下是完全相同的,因为它所做的只是防止文本截断为...

一百零二

Text(...)
    .fixedSize(horizontal: false, vertical: true)
    .frame(maxWidth: 200)

    .background(
        Rectangle()               
    )

enter image description here

这再次显示了行为,但这一次背景也受帧的影响.修饰符的堆叠行为是意料之中的,但我还是不确定为什么文本要扩展到maxWidth.

关于更多信息,这些TextHStack范围内,Spacer()在左侧.HStack在较大的VStack+ScrollView范围内. 移除HStackSpacer()ScrollView/VStack不会改变这种行为.

我试着给它打了minWidth分,并应用了其他修饰符,但都无济于事.我很感激任何帮助,因为我觉得我错过了一些非常明显的东西!

谢谢.

编辑:更简洁.

推荐答案

您应该将.frame(maxWidth:)应用于VStack,而不是分别应用于Text.

struct TestView: View {
    
    var body: some View {
        VStack {
            HStack {
                MyText(text: "111")
                MyText(text: "111")
            }
            MyText(text: "222222222")
            MyText(text: "3333333333333")
            MyText(text: "Long long long long long long long long long long text")
        }
        .frame(maxWidth: 200) // << there
    }
    
    struct MyText: View {
        var text: String
        
        var body: some View {
            Text(text)
                .padding(6)
                .background(
                    Rectangle()
                        .fill(.yellow)
                )
                .border(.blue)
        }
    }
}

The blue border represents the actual Text frame sizes. Preview

If you need a trailing alignment, then you should to set it in VStack(alignment: .trailing). Preview2

如果您还需要Text帧内的尾随对齐,则可以应用.multilineTextAlignment(.trailing)Text.

Swift相关问答推荐

使用SWIFT宏从另一个枚举添加 case

字符串目录不适用于SWIFT包

SWIFT闭包使用的是陈旧的值,即使它是S@转义

无法创建MKAssociateRegion对象

将变量设置为 @Published 会 destruct 代码而不会出现任何错误

如何绑定环境变量ios17

如何制作一个在 SceneKit 中投射阴影的透明物体?

我如何读取并通知可可 macos 中某个类的计算(computed)属性?

需要将 json 映射到 Swift 中的模型

swift 是否遇到 Java 的 2gb 最大序列化大小问题?

MacOS KIND 是如何实现的

如果 Swift 无法分配内存会怎样?

创建 ViewModel 时 iOS 模拟器上的黑屏

类型 '()' 不能符合 View (除非它肯定是 View,这次没有恶作剧)

找不到目标AAA的 SPM 工件 - 仅限 Xcode 13.3

符合协议要求委托变量在 ios13 中可用

为什么 swift 中的类没有存储类型属性?

swift : 具有类型和值的枚举常量

UISearchbar TextField 的高度可以修改吗?

'类 'className' 的 NSManagedObject 必须具有有效的 NSEntityDescription.错误