2

我更改了列表的 y 偏移量,现在它被剪裁了。
我正在努力做到这一点,以便当您滚动时,您可以部分看到标题下方的文本和视图顶部的按钮。换句话说,我希望屏幕的顶部稍微透明。

我将偏移量添加到列表中,这样它就不会与顶部的信息重叠。

列表图像

上图是我的代码中显示的 VStack。我认为 VStack 可能会妨碍我,所以我将其注释掉,结果如下图所示:

顶部没有 VStack 的列表

这是我的代码:

var body: some View {
    ZStack {

        VStack {
            HStack {

                Button(action: {self.showAccountView.toggle()}) {
                    Image(systemName: "person.fill")
                        .renderingMode(.original)
                        .font(.system(size: 20, weight: .bold))
                        .frame(width: 44, height: 44)
                        .modifier(NavButtons())
                }
                .sheet(isPresented: $showAccountView) {
                    AccountView()
                }
                Spacer()
                Button(action: { self.showHelpCenter.toggle()}) {
                    Image(systemName: "questionmark")
                        .renderingMode(.original)
                        .font(.system(size: 20, weight: .bold))
                        .modifier(NavButtons())
                }
                .sheet(isPresented: $showHelpCenter) {
                    HelpCenter()
                }
            }
            .frame(maxWidth: .infinity)
            .padding(.horizontal)
            Spacer()
        }
        List {
            ForEach (store.allLogs) { thing in
                VStack (alignment: .leading) {
                    HStack {
                        Text("\(thing.date) , \(thing.time)")
                    }
                    Text(thing.notes)
                        .multilineTextAlignment(.leading)
                }
            }
        }.offset(y: 50)

    }
}

编辑:

这是一种可能的解决方案:

struct MyList: UIViewRepresentable {
    func makeUIView(context: Context) -> UITableView {
        let view = UITableView()
        view.clipsToBounds = false

        return view
    }

    func updateUIView(_ uiView: UITableView, context: Context) {

    }
}

然后您将使用 makeUIView 和 updateUIView 来更新单元格。这只是一团糟,当时并没有真正使用 SwiftUI。

第二次编辑
我发现滚动视图和表单存在这个问题: 黑色是背景。这是所有三个的代码:
ScrollView、Form 和 List 都在偏移时被剪裁

Group {
        List ((0 ... 10), id: \.self) {
            Text("Row \($0)")
        }
        .offset(y: 200)
        .border(Color.blue, width: 3)
        .background(Color.black)

        ScrollView {
            Text("Text")
        }
        .foregroundColor(.white)
        .offset(y: 200)
        .border(Color.blue, width: 3)
        .background(Color.black)

        Form {
            Text("Text")
        }
        .offset(y: 200)
        .border(Color.blue, width: 3)
        .background(Color.black)
    }

以下是列表的线框图:
列表的线框

以下是与 List/Form/ScrollView 高度相同的框架名称:

列表:
PlainList.BodyContent
ListCore.Container
ListRepresentable
View Host
TableWrapper
UpdateCoalescingTableView

形式: GroupList.BodyContent ListCore.Container
ListRepresentable View Host TableWrapper UpdateCoalescingTableView




ScrollView:
ScrollViewBody
SystemScrollView
查看宿主
HostingScrollView

我想我的问题已经从“我该怎么做……”变成了“为什么会这样?” 我对到底发生了什么感到很困惑。

4

2 回答 2

1
UIScrollView.appearance().clipsToBounds = false

将其粘贴在 AppDelegate.swift -> applicationDidFinishLaunchingWithOptions() 的主体中。默认情况下,它将使您的应用程序中的所有滚动视图都未剪辑。

问题是列表下面有一个表格视图(这是一个滚动视图)。默认情况下,滚动视图被剪裁。我们只需要更改该默认值。

于 2020-05-08T15:19:07.087 回答
0

使用LazyHStack而不是HStack解决裁剪问题。

于 2021-11-18T02:16:48.117 回答