SwiftUI несколько TextField вызывает лаги - PullRequest
3 голосов
/ 03 марта 2020

Я использую много 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. Посмотрите на это отставание ..

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...