小编Fac*_*uez的帖子

SwiftUI 对悬停事件响应不太灵敏

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

struct ContentView: View {
    var body: some View {
            VStack {
                ForEach(0...1000, id:\.self) {index in
                    Element()
                }
            }
    }
}
Run Code Online (Sandbox Code Playgroud)
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()}
    }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

更新:

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

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

    var body: some View {
        ZStack {
            Text("Not a fast hover!").foregroundColor(Color.blue)
            Text("Not a …
Run Code Online (Sandbox Code Playgroud)

macos list hover swiftui

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

避免 SwiftUI 中的文本抖动

有什么想法可以避免下面的抖动吗?代码是这样的:

Text(format: "%02d:%02d", hours, minutes)
    .frame(width: 100, alignment: .trailing)
Run Code Online (Sandbox Code Playgroud)

摇晃

(框架比字符串大)

笔记:

  • 问题是“1”比“0”更薄,所以当我点击一个组合时,比如01:11字符串的总长度小于(假设)00:00并且文本被移位。
  • 固定框架宽度对抖动没有影响。
  • 对齐.trailing.center不修复抖动。
  • ...对不时出现的东西感到好奇。我可以通过的末尾添加一个空白解决它String像这样"%02d:%02d "

滑块代码(用于完成):

Slider(value: $totalTime, in: 0...9).frame(width: 150)
Run Code Online (Sandbox Code Playgroud)

从 Slider 值到 hh:mm 的转换:

Text(format: "%02d:%02d", hours, minutes)
    .frame(width: 100, alignment: .trailing)
Run Code Online (Sandbox Code Playgroud)

beta macos swiftui

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

标签 统计

macos ×2

swiftui ×2

beta ×1

hover ×1

list ×1