SwiftUI - 列表在状态栏文本下方滚动

Sha*_*ikh 7 ios swiftui

我创建列表并在其中添加 VStack 并在 VStack 中添加了一些视图。当我运行该项目时,我观察到 List 的滚动超出了安全区域。仅供参考,如果我删除 Frame 属性仍然是相同的结果。模拟器gif

struct ContentView : View {
var body: some View {

    List(0..<5) { item in
        HStack(alignment: VerticalAlignment.top, spacing: 5) {
            Image(systemName: "photo")
            VStack(alignment: HorizontalAlignment.leading, spacing: 10) {
                Text("USA")
                    .font(.headline)

                Text("This is an extremely long string that will never fit even the widest of Phones Excerpt From: Paul Hudson. “SwiftUI by Example”. Apple Books. ")
                    .lineLimit(nil)
                    .font(.subheadline)
            }
        }
    }
    .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
    .background(Color.red)
        .onAppear() {
            print("on Appear")

    }.onDisappear() {
        print("on Disappear")
    }
}
}
Run Code Online (Sandbox Code Playgroud)

Ala*_*rpa 16

我的也有同样的问题ScrollView

我的解决方案比其他解决方案更简单,因此请尝试一下:

只需向您的or添加.clipped()修饰符,这应该可以防止您的内容滚动到其范围之外。ListScrollView

edgesIgnoringSafeArea(.bottom)如果您希望内容仍然从底部滚动到屏幕外,您可以将其与此结合起来。但要小心——如果你想要这种效果,edgesIgnoringSafeArea(.bottom)就必须追随。.clipped()


kon*_*iki 10

灵感来自肖克特谢赫。你可以直接将 .padding(.top) 添加到 List 中,就大功告成了。不需要 VStack。

在此处输入图片说明

struct ContentView : View {
    var body: some View {
            List(0..<5) { item in
                HStack(alignment: VerticalAlignment.top, spacing: 5) {
                    Image(systemName: "photo")
                    VStack(alignment: HorizontalAlignment.leading, spacing: 10) {
                        Text("USA")
                            .font(.headline)
                        Text("This is an extremely long string that will never fit even the widest of Phones Excerpt From: Paul Hudson. “SwiftUI by Example”. Apple Books. ")
                            .lineLimit(nil)
                            .font(.subheadline)
                    }
                }
            }
            .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
                .background(Color.red)
                .onAppear() {
                    print("on Appear")
            }.onDisappear() {
                print("on Disappear")
            }
        .padding(.top)
    }
}
Run Code Online (Sandbox Code Playgroud)