隐式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给补上。

相关推荐
东坡肘子2 天前
iPhone Duo 带来的机遇与挑战 -- 肘子的 Swift 周报 #153
人工智能·swiftui·swift
东坡肘子9 天前
当 Mac mini 的价格不再 mini -- 肘子的 Swift 周报 #152
人工智能·swiftui·swift
东坡肘子16 天前
举手之劳 -- 肘子的 Swift 周报 #151
人工智能·swiftui·swift
sakiko_16 天前
Swift学习笔记42-SwiftUI的属性包装器(讲解+面试)
笔记·学习·ios·swiftui·swift
Daniel_Coder19 天前
我用 SwiftUI + GRDB 做了一个「按时吃药·服药提醒」App
ios·swiftui·swift·widgetkit
懋学的前端攻城狮22 天前
把 SwiftUI List 换成 NSTableView:一次目录树卡顿的排查记录
macos·swiftui·swift
东坡肘子23 天前
AI 想放弃了,人没有 -- 肘子的 Swift 周报 #150
人工智能·swiftui·swift
东坡肘子1 个月前
越来越慢的 App Review,拦住了谁? -- 肘子的 Swift 周报 #149
人工智能·swiftui·swift
大熊猫侯佩1 个月前
Xcode 预览新升级:arguments 让界面调试井井有条
swiftui·xcode·swift
大熊猫侯佩1 个月前
WWDC26:把 SwiftUI Toolbar 真正握在手心里
swiftui·swift·apple