【问题标题】:Swiftui [BUG] NavigationView and List not showing on iPad simulator onlySwiftui [BUG] NavigationView 和 List 仅在 iPad 模拟器上不显示
【发布时间】:2019-12-14 20:05:28
【问题描述】:

各种iPad模拟器上的空白页

到苹果开发者网站下载以下教程项目:

https://developer.apple.com/tutorials/swiftui/building-lists-and-navigation

在任何 iPad 模拟器上运行此程序,您只会得到一个空白页面,但代码在 Mac/iPhone 和我的真实 iPhone 设备上运行良好。

这绝对是一个错误,我已经向 Apple 报告了,我在这里发帖只是希望像我一样说这个问题的人,请不要在重置模拟器上浪费时间,检查你的代码,重新启动你的笔记本电脑,等到苹果解决这个问题。

截图

Apple SwiftUI 教程项目的示例代码:

import SwiftUI

struct LandmarkList: View {
    var body: some View {
        NavigationView {
            List(landmarkData) { landmark in
                NavigationLink(destination: LandmarkDetail(landmark: landmark)) {
                    LandmarkRow(landmark: landmark)
                }
            }
            .navigationBarTitle(Text("Landmarks"))
        }
    }
}

struct LandmarkList_Previews: PreviewProvider {
    static var previews: some View {
        ForEach(["iPhone SE", "iPhone XS Max"], id: \.self) { deviceName in
            LandmarkList()
                .previewDevice(PreviewDevice(rawValue: deviceName))
                .previewDisplayName(deviceName)
        }
    }
}

【问题讨论】:

    标签: swift swiftui swiftui-list


    【解决方案1】:

    它实际上工作得很好。默认情况下,在 iPad 上,NavigationView 中的 navigationStyle 表示您看到的 detail 视图带有折叠的 master 视图。尝试旋转设备或模拟器,然后您将看到您的主列表。选择一个项目会将其推送到详细信息视图中。或者,从左边缘向右滑动,您的列表就会出现。

    不喜欢这种行为?您可以将导航视图的navigationStyle 设置为StackNavigationViewStyle()。在任何给定时间,它只会在顶部显示一个视图。

    我目前找不到始终显示主视图的选项,因为目前我的应用程序是使用 UISplitViewController 配置的。这可能是暂时的情况。

    【讨论】:

    • 嗨@Procrastin8,是的,旋转设备会看到视图,但这对我来说仍然不好,它表现得有点奇怪。添加StackNavigationViewStyle()是一种解决方案,但是整个视图不再是纵向,不符合我的设计要求。但你的答案是显示的东西,谢谢。
    • 嗨@Procrastin8,你有其他我们可以尝试的风格吗?使用StackNavigationViewStyle() 会使用户界面在屏幕更大的 Mac 和 iPad 上看起来不太好。我喜欢原来的风格
    • 现在严重缺乏定制。如果您真的需要这种行为(对我来说这是合理的!),您需要将 UISplitViewController 包装为 UIViewControllerRepresentable 并手动完成。希望 Apple 能尽快解决这些缺陷。
    【解决方案2】:

    根据@Procrastin8 的回答,我这里是展示示例代码,你只需要添加一行代码.navigationViewStyle(StackNavigationViewStyle()

    import SwiftUI
    
    struct LandmarkList: View {
        var body: some View {
            NavigationView {
                List(landmarkData) { landmark in
                    NavigationLink(destination: LandmarkDetail(landmark: landmark)) {
                        LandmarkRow(landmark: landmark)
                    }
                }
                .navigationBarTitle(Text("Landmarks"))
            }.navigationViewStyle(StackNavigationViewStyle())
        }
    }
    
    struct LandmarkList_Previews: PreviewProvider {
        static var previews: some View {
            ForEach(["iPhone SE", "iPhone XS Max"], id: \.self) { deviceName in
                LandmarkList()
                    .previewDevice(PreviewDevice(rawValue: deviceName))
                    .previewDisplayName(deviceName)
            }
        }
    }
    

    截图

    【讨论】:

      【解决方案3】:

      当我第一次在 iPad 上看到我的应用程序时,我也被推迟了。但后来我意识到不要将所有屏幕都浪费在List 上是有意义的,所以我默认在详细视图中显示第一项:

      var body: some View {
                  NavigationView {
                      // Main view (by default shows on iPhone but not on iPad)
                      VStack{
                          List {
                              ForEach(viewModel.arPictures,  id: \.date) { potd in
                                  NavigationLink(destination: POTDDetailView(potd: potd)) {
                                      Text(potd.title ?? "")
                                  }
                              }
                          }
                          }.navigationBarTitle(Text("Last 8 days pictures"), displayMode: .inline)
                      
                      // Detail view (by default shows on iPad but not on iPhone)
                      if (!viewModel.arPictures.isEmpty){
                              POTDDetailView(potd: viewModel.arPictures[0])
                      }
                      
                  }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-11-24
        • 1970-01-01
        • 1970-01-01
        • 2021-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多