Я использую много TextFields в моем приложении SwiftUI Ma c OS. Я основная форма, где пользователь добавляет данные, которые состоят из нескольких Stacks
/ views
, которые содержат TextFields
/ и Text()
Я заметил странную ошибку, когда я использую Многие TextFields объединены в разных видах, я получаю очень большие лаги при выборе 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. Посмотрите на это отставание ..