swiftUI 2.0列表滚动很慢,我找不到原因..即使是保罗哈德森的伎俩也不起作用
Posted
技术标签:
【中文标题】swiftUI 2.0列表滚动很慢,我找不到原因..即使是保罗哈德森的伎俩也不起作用【英文标题】:swiftUI 2.0 list is very slow to scroll, I can't find the reason.. Even the Paul Hudson trick doesn't work 【发布时间】:2020-12-10 16:49:45 【问题描述】:这是我的代码,我解码一个很长的 json,使用一个对象,@State,...这里有什么问题,为什么滚动如此之慢? 我通过添加 .id(UUID()) 广告列表级别尝试了 Paul Hudson 技巧,但没有成功。这与我放置不好的 dispatchingQueue.main.async 有关吗?真的我不知道。 换行符:双空格或 欢迎任何帮助!
import SwiftUI
struct ContentView: View
@State private var shifts = [Shift]()
var body: some View
NavigationView
List(shifts, id: \.id) shift in
HStack()
Text(shift.date)
.font(.caption2)
padding()
Text(shift.name)
.font(.footnote)
padding()
Text(shift.planned)
.font(.footnote)
Text(":")
.font(.footnote)
Text(shift.replaced)
.font(.footnote)
.id(UUID())
.onAppear(perform:
loadData()
)
extension ContentView
func loadData()
let login = "xxx"
let password = "xxxx!"
let ftpServer = "www.xxxx.be"
let fileName = "export.json"
let ftpUrl = "ftp://\(login):\(password)@\(ftpServer)/\(fileName)"
guard let url = URL(string: ftpUrl) else
print("error connection")
return
let request = URLRequest(url: url)
URLSession.shared.dataTask(with: request) data, response, error in
if let data = data
if let ShiftDataStore = try? JSONDecoder().decode(ShiftDataStore.self, from: data)
DispatchQueue.main.async
self.shifts = ShiftDataStore.shifts
.resume()
import Foundation
struct Shift: Decodable,Hashable
var name: String
var planned: String
var replaced: String
var gsm: String
var function: String
var replacedFunction : String
var date: String
var id: UUID = UUID()
enum CodingKeys: String, CodingKey
case name = "N"
case planned = "S"
case replaced = "RS"
case gsm = "M"
case function = "R"
case replacedFunction = "RR"
case date = "D"
init(from decoder: Decoder) throws
let values = try decoder.container(keyedBy: CodingKeys.self)
name = try values.decode(String.self, forKey: .name)
planned = try values.decode(String.self, forKey: .planned)
replaced = try values.decode(String.self, forKey: .replaced)
gsm = try values.decode(String.self, forKey: .gsm)
function = try values.decode(String.self, forKey: .function)
replacedFunction = try values.decode(String.self, forKey: .replacedFunction)
date = try values.decode(String.self, forKey: .date)
struct ShiftDataStore: Decodable
var shifts: [Shift]
【问题讨论】:
尝试将列表行的内容移动到以shift
作为输入数据的单独子视图中。
没有成功...同样的结果。谢谢您的回复。
我使用 combine、Observable 等更改代码,没有变化的数据加载很快,但无法滚动数据
【参考方案1】:
通过将 padding() 更改为 spacer() 修复了滚动问题。 感谢阅读和帮助!
【讨论】:
以上是关于swiftUI 2.0列表滚动很慢,我找不到原因..即使是保罗哈德森的伎俩也不起作用的主要内容,如果未能解决你的问题,请参考以下文章
列表不滚动(在 SwiftUI 中——为了消除其他问题的歧义)