swift - 将按钮放置在节页眉/页脚上时,iOS 14 上出现奇怪的 UI 渲染问题

标签 swift ios14 swiftui-list swiftui

在下面的示例代码中,一个按钮放置在 (form-) 部分标题上,只要按下它就会切换工作表。该工作表具有要显示的元素列表。

import SwiftUI

struct ContentView: View {
    var body: some View {
        VStack{
            Form{
                Section(header: headerView()) {
                    Text("Some Text")
                }
            }
        }
    }
}

struct headerView: View {
    @State var showSheet = false

    var body: some View {
        Button(action: { self.showSheet.toggle()}){
            HStack{
                Spacer()
                Image(systemName: "pencil.and.ellipsis.rectangle")
                Text("View Sheet")
            }
        }.sheet(isPresented: $showSheet) {sheetView()}
    }
}

struct sheetView: View {
    @Environment(\.presentationMode) private var presentationMode

    var body: some View {
        NavigationView{
            VStack(alignment: .leading) {
                List() {
                    Text("List element 1")
                    Text("List element 2")
                    Text("List element 3")
                    Text("List element 4")
                }
            }
            .navigationBarTitle(Text("Logs"), displayMode: .inline)
            .navigationBarItems(leading: EditButton(), trailing: Button(action: {self.presentationMode.wrappedValue.dismiss()}) { Text("Done").bold()})
        }
    }
}
这在 iOS 13 上运行良好。但是,在 iOS 14 中,正如您在下面的屏幕截图中看到的那样,它呈现完全损坏:
  • 列表元素具有奇怪的字体大小、颜色且大写 (最重要的一个!)
  • 导航栏按钮呈灰色且大写
  • 导航栏标题为大写

  • 损坏的行为 只要您不触摸屏幕,就会保持不变。 当您触摸屏幕并向下拖动工作表时,列表外观将得到更正。如果您对 NavigationBar 执行相同的操作,它也会正确呈现。
    有人也面临这个问题吗?任何已知的修复?
    enter image description here

    最佳答案

    这看起来像一个错误。可能的解决方法是将工作表移出表单。
    使用 Xcode 12.0/iOS 14 测试。
    demo

    struct ContentView: View {
        @State var showSheet = false
        var body: some View {
            VStack{
                Form{
                    Section(header:
                            headerView(showSheet: $showSheet)
                            ) {
                        Text("Some Text")
                    }
                }
            }.sheet(isPresented: $showSheet) {sheetView()}
        }
    }
    
    struct headerView: View {
        @Binding var showSheet: Bool
    
        var body: some View {
    
            Button(action: { self.showSheet.toggle()}){
                HStack{
                    Spacer()
                    Image(systemName: "pencil.and.ellipsis.rectangle")
                    Text("View Sheet")
                }
            }
        }
    }
    

    关于swift - 将按钮放置在节页眉/页脚上时,iOS 14 上出现奇怪的 UI 渲染问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64179730/

    相关文章:

    ios - 将无名元组的字符串表示形式转换为元组

    ios - 如何在 xcode 中使 5 个按钮的水平宽度相同

    SwiftUI:在 Xcode 12/iOS 14 中使用环境对象(--> 如何/在何处将对象放置在环境中?)

    swift - 为什么在 SwiftUI 中单击列表项后 ListView 项会变灰?

    swift - Sprite Kit 如何更新按钮上的图像?

    ios - 与传递对象保持循环

    ios - 上下文菜单破坏性操作,SwiftUI

    ios - Xcode12 CoreNFC 模拟器库未加载

    swift - 在 SwiftUI 中使用 slider 创建音频播放器单元格

    ios - 如何在 SwiftUI 中显示 HTML 文本