0

我一直在 iOS 15 设备上测试我的应用程序(使用 Xcode 12.5.1,即 iOS 14 SDK 构建),SwiftUI 部分页眉和页脚的布局是错误的:底部填充太多,顶部填充不足,并且页脚上没有足够的顶部填充。

当针对 iOS 15 SDK(使用 Xcode 13 beta 5)编译时,它看起来很好。但是,我希望我的应用对于任何 iOS 15 测试版用户来说都是正确的;在 GM 发布之前,我无法提交使用 iOS 15 SDK 构建的更新版本,因此我希望能够仅使用 iOS 14 API 来“修复”这个问题。有没有好的解决方案,或者我应该手动摆弄填充?

SwiftUI 视图示例:

struct ContentView: View {
    var body: some View {
        NavigationView {
            List {
                Section(header: Text("Header"), footer: Text("Footer text goes here.")) {
                    Text("Cell one")
                    Text("Cell two")
                }
            }.listStyle(GroupedListStyle())
            .navigationTitle("Hello Stack Overflow")
            .navigationBarTitleDisplayMode(.inline)
        }
    }
}

这将产生以下 UI:

使用上述代码生成的应用程序的屏幕截图

在 Xcode 13 上构建并在同一个 iOS 15 模拟器上运行的相同代码会产生正确的布局:

相同的代码,而不是 Xcode 13 构建

4

1 回答 1

0

我自己没有看到这个错误,但如果需要,您可以在标题内容中添加填充。Xcode 13 有一个很棒的Section(content:header:)构造函数,它可以让你提供一个带有标题的闭包,但是由于这里的目标是使用 Xcode 12.5 构建,所以让我们将标题拆分为一个单独的变量,如下所示:

struct ContentView2: View {
    
    @ViewBuilder
    var header: some View {
        if #available(iOS 15, *) {
            Text("Header")
                .padding(.top, 16) // pad header to workaround bug
        } else {
            Text("Header")
        }
    }
    
    var body: some View {
        NavigationView {
            List {
                Section(header: header, footer: Text("Footer text goes here.")) {
                    Text("Cell one")
                    Text("Cell two")
                }
            }
            .listStyle(GroupedListStyle())
            .navigationTitle("Hello Stack Overflow")
            .navigationBarTitleDisplayMode(.inline)
        }
    }
}

您可以对页脚执行相同的操作。

于 2021-08-23T19:08:13.060 回答