隐式HStack的怪异表现

SwiftUI中存在一些隐式的HStack,写起来比较方便。有时会懒得写HStack。大多数情况写不写效果是一样的。不过也有些时候会有怪异的表现。

因为文档没有清楚说明,也没有源码,所以说不清到底是什么原因,只是做个记录。或许有人也遇到类似的情况,可以避坑。

swift 复制代码
struct ContentView: View {

    let string = "这是一段测试代码"

    var body: some View {

        NavigationView {

            List {

                NavigationLink {

                    Text(string)

                } label: {

                    Text(string)

                    Spacer()

                    Text("\(string.count)字")

                }

            }

            .listStyle(.sidebar)

            .padding()

        }

    }

}

这里的label是隐式的HStack,也能运行,大致情况也不差。看效果。

swift 复制代码
struct ContentView: View {

    let string = "这是一段测试代码"

    var body: some View {

        NavigationView {

            List {

                NavigationLink {

                    Text(string)

                } label: {

                    HStack {

                        Text(string)

                        Spacer()

                        Text("\(string.count)字")

                    }

                }

            }

            .listStyle(.sidebar)

            .padding()

        }

    }

}

这里的label是显式写出的HStack,看效果。

可以看出,同样是Spacer,在隐式HStack中,它的固定宽度比显式中的大。并且不能通过设置小一点的minLength来缩小这个固定的宽度。Spacer(minLength: 2),这样写也是没用的。

不知道具体的原因。反正偷懒时如果遇到怪异的表现,还是老老实实把HStack给补上。

相关推荐
大熊猫侯佩12 天前
消失的它:摆脱 SwiftUI 中“嵌入视图数量不能超过 10 个”限制的秘密
swiftui·swift·apple
东坡肘子13 天前
失去时才会觉得可贵 | 肘子的 Swift 周报 #090
swiftui·swift·apple
大熊猫侯佩14 天前
SwiftUI 中创建一个自定义文件管理器只需4步!你敢信!?
swiftui·swift·apple
大熊猫侯佩15 天前
SwiftUI 趣谈之:绝不可能(Never)的 View!
swiftui·swift·apple
大熊猫侯佩16 天前
SwiftUI 更自然地向自定义视图传递参数的“另类”方式
swiftui·swift·apple
大熊猫侯佩17 天前
SwiftUI 集合视图(Grid)拖放交换 Cell 的极简实现
swiftui·swift·apple
大熊猫侯佩18 天前
SwiftUI 中无法对添加模糊(blur)效果视图截图的初步解决
swiftui·swift·apple
大熊猫侯佩19 天前
Xcode 15.0 新 #Preview 预览让 SwiftUI 界面调试更加悠然自得
swiftui·swift·apple
东坡肘子20 天前
WWDC 2025:回归务实的一年 | 肘子的 Swift 周报 #089
swiftui·swift·wwdc