首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ScrollView行为怪异(Xcode11 GM seed - SwiftUI)

ScrollView行为怪异(Xcode11 GM seed - SwiftUI)
EN

Stack Overflow用户
提问于 2019-09-13 10:11:06
回答 2查看 201关注 0票数 0

我在试着做一份定制的清单。如果我们在scrollView中添加封装的VStack,并尝试从该VStack添加新的行,那么它的行为就很奇怪。但是我们必须封装,因为在Xcode中会给出“复杂的视图编译器错误”。为了更好地理解,我提供了完整的代码。请尝试运行它。新的元素没有像预期的那样添加,它将所有的东西都往上推。

代码语言:javascript
复制
struct RowView: View {

var body: some View {
    VStack{
          HStack{
              Spacer()

              .foregroundColor(Color.black)
              Spacer()
          }

      }
      .background(Color.white)
      .cornerRadius(13)
      .padding()
}}

struct cView:View {
@State var array: [String] = []

@State var height: CGFloat = 60
var body: some View {
    VStack{
        Button(action: {
            self.array.append("Test")
        }, label: {
            Text("Add")
        })

        VStack{

            ForEach(array, id: \.self){_ in
                 RowView()
            }
        }
        .background(Color.red)
        .cornerRadius(13)
        .padding()

    }


}}

struct ContentView : View {


@State var array: [String] = []

var body: some View {

        ScrollView{

            VStack{


                Text("d")
                    .frame(height: 90)
                VStack{
                       cView()
                }



            }
        }
        .navigationBarTitle("Test", displayMode: .automatic)


}}
EN

回答 2

Stack Overflow用户

发布于 2019-09-13 14:34:30

当我重新格式化并删除未使用的内容时,我得到:

代码语言:javascript
复制
struct RowView: View {
    let text: String

    var body: some View {
        VStack{
            HStack{
                Spacer()
                Text(text).foregroundColor(Color.black)
                Spacer()
            }
        }
        .background(Color.white)
        .cornerRadius(13)
        .padding()
    }
}

struct cView:View {
    @State var array: [String] = []

    @State var height: CGFloat = 60
    var body: some View {
        VStack{
            Button(
                action: { self.array.append("Test") },
                label: { Text("Add") }
            )
            ForEach(array, id: \.self){text in
                RowView(text: text)
            }
            .background(Color.red)
            .cornerRadius(13)
            .padding()
        }
    }
}

struct ContentView : View {
    var body: some View {
        List {
            VStack{
                Text("d")
                cView()
            }
        }
    }
}

ScrollView是一个真正的PITA,它讨厌文本,这就是为什么我用一个列表来代替它。RowView遗漏了一个文本IMHO,所以我加了一个。ContentView中的数组从未使用过,所以我删除了它,类似地,navigatinBarTitle需要一个NavigationView。

这不是一个真正的答案,因为它使用List而不是ScrollView,但它确实指出了您的问题所在。这也很奇怪,因为所有的东西都在一个单独的列表行中,但我试图尽可能少地更改。

您可能希望尝试在代码上运行SwiftLint。我经常骂它,特别是当它抱怨我的枚举开关的圈复杂度时,但它确实改进了我的代码。

票数 1
EN

Stack Overflow用户

发布于 2019-09-13 16:48:59

很可能是一个bug,但我不需要封装。如果我不这样做,代码就会按预期运行:

代码语言:javascript
复制
struct RowView: View {
    var body: some View {
        VStack{
            HStack{
                Spacer()
                    .foregroundColor(Color.black)
                Spacer()
            }

        }
        .background(Color.white)
        .cornerRadius(13)
        .padding()
    }
}

struct ContentView : View {
    @State var array: [String] = []
    @State var height: CGFloat = 60

    var body: some View {
        ScrollView{
            VStack{
                Text("d")
                    .frame(height: 90)

                VStack{
                    Button(action: {
                        self.array.append("Test")
                    }, label: {
                        Text("Add")
                    })

                    VStack{
                        ForEach(array, id: \.self){_ in
                            RowView()
                        }
                    }
                    .background(Color.red)
                    .cornerRadius(13)
                    .padding()
                }
            }
        }
        .navigationBarTitle("Test", displayMode: .automatic)
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57916502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档