swift - SwiftUI 多个 TextField 导致滞后
问题描述
我在我的 SwiftUI Mac OS 应用程序中使用了许多 TextField。我是一个主窗体,用户在其中添加数据,由多个Stacks
/组成,views
其中包含TextFields
/ 和Text()
我注意到一个奇怪的错误,当我在不同的视图中组合使用多个 TextField 时,在选择 TextField 时会出现一些非常严重的滞后。另外,当我跳到下一个时,Tab
它需要时间。
这真是奇怪的行为,我不确定是什么原因造成的。我对许多人也有不同的看法TextFields
,一切都很顺利。
有时我也无法跳回之前TextField
的Shift+Tab
.
编辑:我可以弄清楚如何摆脱它。但是,仅当我删除一个视图时。我不想。
我的主容器如下所示:
HStack
{
//Left Side
VStack{
Text("Here is the next #1")
}
VStack
{
//The View posted below
ViewBelow()
}
}
如果我删除第一个 VStack,问题就解决了。没有什么落后的。如果我添加它,它就会再次出现。
只是为了给你一个我的代码的领口(许多带有 TextFields 的堆栈)
ZStack
{
VStack
{
HStack
{
Text("Personal Data")
.font(.title)
.fontWeight(.bold)
.padding(.horizontal, 0)
.padding(.vertical, 5)
Spacer()
}
Divider()
.padding(.bottom, 5)
//Personal Data Types
HStack(spacing: 0)
{
//Left Element
VStack(alignment: .center)
{
Text("Vorname")
.foregroundColor(Color.gray)
} .frame(minWidth: 0, maxWidth: .infinity, alignment: .leading)
//Right Elemenet
VStack()
{
Text("Nachname")
.foregroundColor(Color.gray)
}
.frame(minWidth: 0, maxWidth: .infinity, alignment: .leading)
}.frame(minWidth: 0, maxWidth: .infinity)
HStack(spacing: 0)
{
VStack(alignment: .center)
{
//Left Element
if (self.editMode)
{
TextField("Enter some text", text: $s_test)
.frame(maxWidth:250)
}
else
{
Text(self.person.firstName)
.font(.body)
}
} .frame(minWidth: 0, maxWidth: .infinity, alignment: .leading)
VStack()
{
//Left Element
if (self.editMode)
{
TextField("Enter some text", text: self.$s_test)
.frame(maxWidth:250)
}
else
{
Text(self.person.lastName)
.font(.body)
}
}
.frame(minWidth: 0, maxWidth: .infinity, alignment: .leading)
}.frame(minWidth: 0, maxWidth: .infinity)
.padding(.top, 0)
//Personal Data Types
HStack(spacing: 0)
{
//Left Element
VStack(alignment: .center)
{
Text("Nickname")
.foregroundColor(Color.gray)
} .frame(minWidth: 0, maxWidth: .infinity, alignment: .leading)
//Right Elemenet
VStack()
{
Text("Birthday")
.foregroundColor(Color.gray)
}
.frame(minWidth: 0, maxWidth: .infinity, alignment: .leading)
}.frame(minWidth: 0, maxWidth: .infinity)
.padding(.top, 10)
HStack(spacing: 0)
{
VStack(alignment: .center)
{
//Left Element
if (self.editMode)
{
TextField("Enter some text", text: self.$s_test)
.frame(maxWidth:250)
}
else
{
Text(self.person.nickname)
.font(.body)
}
} .frame(minWidth: 0, maxWidth: .infinity, alignment: .leading)
VStack()
{
//Right Element
if (self.editMode)
{
TextField("Enter some text", text: self.$s_test)
.frame(maxWidth:250)
}
else
{
Text(self.person.birthdate)
.font(.body)
}
}
.frame(minWidth: 0, maxWidth: .infinity, alignment: .leading)
}.frame(minWidth: 0, maxWidth: .infinity)
.padding(.top, 0)
}
也许有人已经经历过同样的事情。我不确定如何解决它。我删除了许多视图,然后效果更好。但是我不确定这只是 TextFields 的数量还是其他视图中的一些错误。
我在 Gif 中展示了滞后。当我将鼠标悬停在 TextField 上方时,我会立即按下。看到那个滞后..
解决方案
推荐阅读
- java - 使用jsoup从body标签中提取innerHtml
- vue.js - Vuetify 自动完成 - 如何传递默认值?
- swift - 使用四元数从无人机投影图像点
- php - Woocommerce REST API 没有通过 REST API 对新订单应用 TAX
- powershell - 重构使用开关的 powershell 函数
- flutter - Flutter - 下拉值
- c++ - Clang 不优化这段代码有什么原因吗?
- python - Python客户端hazhalcast无法连接HazelcastClient.ClusterService
- zeromq - ZMQ双向发布者-订阅者
- python-3.x - 如何在python中将带有+hh:mm提供的时区的DateTime对象转换为UTC(祖鲁语)?