【问题标题】:SwiftUI not very responsive to hover eventsSwiftUI 对悬停事件不是很敏感
【发布时间】:2020-02-04 05:28:46
【问题描述】:

我正在尝试实现一个包含 200 或 300 个元素的列表,并且我想更改悬停事件中文本的颜色。但是应用程序开始显示悬停事件的延迟。查看下面的示例代码:

struct ContentView: View {
    var body: some View {
            VStack {
                ForEach(0...1000, id:\.self) {index in
                    Element()
                }
            }
    }
}
struct Element: View {
    @State private var hover = false

    var body: some View {
        Text("Not a fast hover!")
          .foregroundColor(hover ? Color.blue : Color.white)
          .onHover {_ in self.hover.toggle()}
    }
}

更新:

这似乎提高了响应能力。此外,如果我更改背景而不是前景色,代码也会更加灵敏。

struct Element: View {
    @State private var hover = false

    var body: some View {
        ZStack {
            Text("Not a fast hover!").foregroundColor(Color.blue)
            Text("Not a fast hover!").opacity(hover ? 0 : 1).foregroundColor(Color.white)
        }
        .frame(width: 200)
        .onHover {_ in self.hover.toggle()}
    }
}

【问题讨论】:

  • 您还尝试了什么?在 VStack 中使用 1000 个视图确实不是任何人在 1.0 版框架中都会做的事情。例如,假设 List 的限制存在类似的情况 - 您是否尝试过对事物进行分组?
  • 我有一个可能超过 10.000 项的列表。但目前代码在 100 处开始阻塞(可能是因为每个项目都有多个 Text() 组件)。我试过分组是的,但没有奏效。
  • 两个想法。首先,一个 List 中有 10 个项目的限制。解决方法是使用组。看看这里的第 5 条提示:hackingwithswift.com/quick-start/swiftui/… (2) 虽然 List 旨在类似于 UITableView - 只是更具声明性且更易于编码 - 请记住,我们正处于 SwiftUI 的非常早期.无论您希望如何显示 10,000 个视图,即使是可重复使用的行,我敢肯定您会遇到各种问题 - 包括比其他修饰符表现更好的问题。这样的东西在 UIKit 中的表现如何?

标签: macos list hover swiftui


【解决方案1】:

解决方案是使用 List 组件而不是 VStack。

【讨论】:

    猜你喜欢
    • 2021-03-09
    • 1970-01-01
    • 2020-04-03
    • 1970-01-01
    • 2019-01-12
    • 2016-01-28
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多