ScrollView代理weired(Xcode 11 GM种子-SwiftUI)

ScrollView代理weired(Xcode 11 GM种子-SwiftUI),swiftui,ios13,xcode11,swiftui-list,Swiftui,Ios13,Xcode11,Swiftui List,我想做一个自定义列表。如果我们在scrollView中添加封装的VStack,并尝试从该VStack中添加新行,那么它的行为将是奇怪的。但我们必须进行封装,因为在Xcode中会出现复杂的视图编译器错误。为了更好地理解,我提供了完整的代码。请试着运行它。新元素并没有像预期的那样被添加,它把一切都推了上去 struct RowView: View { var body: some View { VStack{ HStack{ Spacer()

我想做一个自定义列表。如果我们在scrollView中添加封装的VStack,并尝试从该VStack中添加新行,那么它的行为将是奇怪的。但我们必须进行封装,因为在Xcode中会出现复杂的视图编译器错误。为了更好地理解,我提供了完整的代码。请试着运行它。新元素并没有像预期的那样被添加,它把一切都推了上去

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)


}}

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

结构行视图:视图{ 让文本:字符串 var body:一些观点{ VStack{ HStack{ 间隔棒 Texttext.foregroundColorColor.black 间隔棒 } } .背景颜色.白色 .角半径13 衬料 } } 结构视图:视图{ @状态变量数组:[String]=[] @状态变量高度:CGFloat=60 var body:一些观点{ VStack{ 按钮 操作:{self.array.appendTest}, 标签:{TextAdd} ForEacharray,id:\.self{text in RowViewtext:文本 } .backgroundColor.red .角半径13 衬料 } } } 结构ContentView:View{ var body:一些观点{ 名单{ VStack{ 短信 cView } } } } ScrollView是一个真正的PITA,它讨厌文本,这就是为什么我用列表替换它。RowView在IMHO中缺少一条文本,因此我在其中添加了一条。ContentView中的数组从未使用过,因此我将其删除,类似地,NavigationPartitle需要NavigationView

这并不是一个真正的答案,因为它使用列表而不是滚动视图,但它确实指出了问题所在。这也很奇怪,因为每件事都在一个列表行中,但我尽量少做更改


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

很可能是个bug,但我不需要封装。如果我不这样做,代码将按预期工作:

结构行视图:视图{ var body:一些观点{ VStack{ HStack{ 间隔棒 .foregroundColorColor.black 间隔棒 } } .背景颜色.白色 .角半径13 衬料 } } 结构ContentView:View{ @状态变量数组:[String]=[] @状态变量高度:CGFloat=60 var body:一些观点{ 滚动视图{ VStack{ 短信 .框架高度:90 VStack{ 按钮操作:{ self.array.appendTest },标签:{ 文本添加 } VStack{ ForEacharray,id:\.self{uUin 罗维尤 } } .backgroundColor.red .角半径13 衬料 } } } .navigationBarTitleTest,显示模式:。自动 } }
谢谢我认为这是目前唯一的办法。有没有办法改变列表分隔符的颜色?