小编Mon*_*ois的帖子

SwiftUI 使用 @EnvironmentObject 和选择器会导致 ScrollView contentOffset 绑定警告

我有一个 watchOS 应用程序,有两个屏幕。当我导航到第二个屏幕时,我在控制台中收到以下警告:

ScrollView contentOffset 绑定已读取;这将导致视图性能非常低效,因为只要其 contentOffset 发生变化,ScrollView 的内容就会更新。在绑定创建者和 ScrollView 之间没有父子关系的视图中读取 contentOffset 绑定以避免这种情况。

这似乎与在第二个屏幕中使用 @EnvironmentObject 进行选择器选择有关。如果我删除 @EnvironmentObject 并将其替换为 @State 以进行选择器选择,则不会发生警告。(但是更新不会反映在第一个屏幕上)。

为什么会发生这种情况?我可以做什么来阻止这个警告?

这是我的代码:

第一个屏幕:

import SwiftUI

struct ContentView: View {
  @EnvironmentObject var itemManager: ItemManager

  var body: some View {
    List {
      ForEach(itemManager.items.indices) { index in
        NavigationLink(destination: ItemView(index: index)) {
          VStack(alignment: HorizontalAlignment.leading) {
            HStack {
              Text(self.itemManager.items[index].name)
              Spacer()
              Text("x")
              Text(String(self.itemManager.items[index].quantity))
            }
            Text(self.itemManager.items[index].type.rawValue).font(.footnote)
          }
        }
      }
    }
  }
}

struct ContentView_Previews: PreviewProvider {
  static var previews: some View {
    ContentView().environmentObject(ItemManager())
  }
}
Run Code Online (Sandbox Code Playgroud)

第二个屏幕:

import …
Run Code Online (Sandbox Code Playgroud)

swiftui

8
推荐指数
1
解决办法
1975
查看次数

用于 SwiftUI 预览的应用程序数据文件存储在哪里

当我在 XCode 模拟器中运行应用程序时,它的应用程序支持目录位于:

~/Library/Developer/CoreSimulator/Devices/425816A6-9CE8-4884-9D74-B8246D3BA2C5/data/Containers/Data/PluginKitPlugin/729EDADB-CD24-4DFE-A3A4-C378C5743803/Library/Application%20Support/
Run Code Online (Sandbox Code Playgroud)

但是,当我对 SwiftUI 文件使用画布预览时,Application Support 目录在哪里?

xcode ios swift swiftui

1
推荐指数
1
解决办法
817
查看次数

标签 统计

swiftui ×2

ios ×1

swift ×1

xcode ×1