首页 > 解决方案 > SwiftUI 多个 TextField 导致滞后

问题描述

我在我的 SwiftUI Mac OS 应用程序中使用了许多 TextField。我是一个主窗体,用户在其中添加数据,由多个Stacks/组成,views其中包含TextFields/ 和Text()

我注意到一个奇怪的错误,当我在不同的视图中组合使用多个 TextField 时,在选择 TextField 时会出现一些非常严重的滞后。另外,当我跳到下一个时,Tab它需要时间。

这真是奇怪的行为,我不确定是什么原因造成的。我对许多人也有不同的看法TextFields,一切都很顺利。

有时我也无法跳回之前TextFieldShift+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 上方时,我会立即按下。看到那个滞后..

在此处输入图像描述

标签: swiftmacosswiftui

解决方案


推荐阅读