SwiftUI 视图出现延迟
Posted
技术标签:
【中文标题】SwiftUI 视图出现延迟【英文标题】:Delay in SwiftUI view appearing 【发布时间】:2021-12-28 01:28:25 【问题描述】:我有一个显示两个计算字符串的视图。目前,我使用 .onAppear 计算字符串。但是在计算字符串之前视图不会呈现,让用户观看前一个视图 2 到 5 秒直到计算完成,并且永远不会显示进度条。 代码是:
struct CalculatingProgressView: View
var body: some View
ProgressView
Text("Calculating")
.font(.title)
struct OffspringView: View
@State private var males: String = ""
@State private var females: String = ""
@State private var busy = true
func determineOffspring()
let temp = theOffspring(of: sire, and: dam)
males = temp.0
females = temp.1
busy = false
var body: some View
Section(header: Text("Male Offspring"))
Text(males)
.font(.callout)
if busy
CalculatingProgressView()
Section(header: Text("Female Offspring"))
Text(females)
.font(.callout)
.onAppear determineOffspring()
如何让视图使用进度条进行渲染,以便用户知道应用实际上正在执行某项操作?
【问题讨论】:
欢迎来到 Stack Overflow!请拨打tour 并查看:How do I ask a good question? 和How to create a Minimal, Reproducible Example。determineOffspring
函数应该在您的模型中。该模型应该是一个ObservableObject
,而被计算的后代应该是一个@Published
变量,它最初是nil
。然后您可以在offspring
保持nil
时显示进度条。
【参考方案1】:
您的代码似乎对我有用。你可以试试这个方法
在计算 determineOffspring
时显示 CalculatingProgressView
。
var body: some View
if busy
CalculatingProgressView()
.onAppear determineOffspring()
else
Section(header: Text("Male Offspring"))
Text(males).font(.callout)
Section(header: Text("Female Offspring"))
Text(females).font(.callout)
注意,determineOffspring
中的 theOffspring(...)
应该使用类似的完成闭包
以下,“等待”直到计算完成:
func determineOffspring()
theOffspring(of: sire, and: dam) result in
males = result.0
females = result.1
busy = false
【讨论】:
以上是关于SwiftUI 视图出现延迟的主要内容,如果未能解决你的问题,请参考以下文章