ScrollView 行为怪异(Xcode 11 GM 种子 - SwiftUI)

Posted

技术标签:

【中文标题】ScrollView 行为怪异(Xcode 11 GM 种子 - SwiftUI)【英文标题】:ScrollView acting weired (Xcode 11 GM seed - SwiftUI) 【发布时间】:2019-09-13 02:11:05 【问题描述】:

我正在尝试制作自定义列表。如果我们在 scrollView 中添加 Encapsulated 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)



【问题讨论】:

【参考方案1】:

当我重新格式化并删除未使用的东西时,我得到了:

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,它讨厌 Text,这就是我用 List 替换它的原因。 RowView 缺少一个 Text 恕我直言,所以我放了一个。 ContentView 中的数组从未使用过,所以我删除了它,同样,navigatinBarTitle 需要一个 NavigationView。

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

您可能想尝试在您的代码上运行 SwiftLint。我经常对它发誓,尤其是当它抱怨我的枚举开关的圈复杂性时,但它确实改进了我的代码。

【讨论】:

谢谢。我认为这是目前唯一的方法。有没有办法改变列表分隔符的颜色?【参考方案2】:

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

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)
    

【讨论】:

以上是关于ScrollView 行为怪异(Xcode 11 GM 种子 - SwiftUI)的主要内容,如果未能解决你的问题,请参考以下文章

re.findall 行为怪异

jQuery slick 滑块行为怪异

ScrollView 中的动画不起作用?使用 Xcode 11 测试版 6

插入排序函数行为怪异 C++

Sheet弹出视图在SwiftUI中“怪异”行为的解决(第一次弹出视图的可选属性总得到nil值)

Sheet弹出视图在SwiftUI中“怪异”行为的解决(第一次弹出视图的可选属性总得到nil值)