SwiftUI中可能存在除法器错误

SwiftUI中可能存在除法器错误,swiftui,Swiftui,我正在构建一个iOS应用程序,目前我发现Divider组件有一个奇怪的行为 请参见以下屏幕截图: 右上角的V形使其他两个(或更多)组件出现/消失,问题发生在应出现在控件A旁边的垂直分隔符上 视图的一般SwiftUI层次结构类似于ScrollView->VStack->ForEach->[HStack->Img Divider VStack(带有一些文本+控件X)] 请注意,它不仅发生在第一个组件上。 控件X包含SwiftUI组件,没有自定义项 现在,我在调试后发现了一些有趣的事实: 如果我使

我正在构建一个iOS应用程序,目前我发现Divider组件有一个奇怪的行为

请参见以下屏幕截图:

右上角的V形使其他两个(或更多)组件出现/消失,问题发生在应出现在控件A旁边的垂直分隔符上

视图的一般SwiftUI层次结构类似于ScrollView->VStack->ForEach->[HStack->Img Divider VStack(带有一些文本+控件X)]

请注意,它不仅发生在第一个组件上。 控件X包含SwiftUI组件,没有自定义项

现在,我在调试后发现了一些有趣的事实:

  • 如果我使用一个布尔标志使分隔符显示/消失,并在点击时更改,则分隔符将按预期显示
  • 如果我使用一个布尔标志使分隔符显示/消失,该标志在“onAppear”上更改,则不会显示分隔符
  • 分隔器视图的宽度为0.33,但高度为0(这才是真正的问题)
  • 向“控件A”添加或删除视图可以使分隔符显示
我一直在试图找出原因,但没有成功,所以我倾向于认为这可能是一个错误,没有正确更新分隔器组件的最终高度

更新: 这个问题只发生在一些设备上,iPhone12就是其中之一

下面是一些重现类似问题的代码(在这种情况下,分隔符是可见的,但其高度是错误的):

struct BugScreen:视图{
var body:一些观点{
VStack{
文本(“错误测试”)
滚动视图(显示指示器:false){

ForEach((1..找到了使其按预期运行的方法,只需添加
。fixedSize(水平:false,垂直:true)

您是否会添加问题代码示例并指出您希望在其中看到什么?当然,使用代码示例进行更新,并指定错误仅发生在某些设备上
struct BugScreen: View {
    var body: some View {
        VStack {
            Text("Bug Test")
            ScrollView(showsIndicators: false) {
                ForEach((1..<3)) { i in
                    MyView(index:i)
                }
                Spacer(minLength: 75)
            }
            .padding(.horizontal, 20)
        }
        .navigationBarTitle("", displayMode: .inline)
    }
}

struct MyView: View {
    @State var expanded = false
    var index: Int
    
    var body: some View {
        VStack(spacing: 0) {
            HStack(spacing: 15) {
                Image("ImageName")
                    .resizable()
                    .frame(width: 50, height: 50)
                Divider()
                VStack(alignment: .leading) {
                    VStack(alignment: .leading, spacing: 5) {
                        HStack {
                            Text("Test \(index)")
                                .font(.headline)
                                .fontWeight(.light)
                                .fixedSize(horizontal: false, vertical: true)
                            Spacer()
                            
                            Image(systemName: expanded ? "chevron.up": "chevron.down")
                                .padding(.leading, 10)
                                .font(Font.body.weight(.thin))
                        }
                    }
                    
                    Divider()
                    
                    Text("Some text")
                            .fixedSize(horizontal: false, vertical: true)
                    
                }
            }
            .padding([.vertical, .leading])
            .padding(.trailing, 5)
            .background(
                RoundedRectangle(cornerRadius: expanded ? 0: 25, style: .continuous).foregroundColor(.white)
            )
            .onTapGesture {
                    withAnimation { expanded.toggle() }
            }
            
            if expanded {
                Divider().background(Color(.black))
                VStack {
                    ForEach((1..<4)) { control in
                            Spacer(minLength: 10)
                            MyControlsView()
                            Divider().background(Color(.black))
                        
                    }
                    Text("More text")
                }
                .padding(.horizontal, 10)
                .background(Color.white)
            }
            
            Divider().background(Color(.black))
        }
    }

struct MyControlsView: View {
    @State var sliderValue = 0.0
    var body: some View {
        VStack {
            HStack {
                Image("image_name")
                    .resizable()
                    .frame(width: 50, height: 50, alignment: .center)
                
                Divider()
                
                VStack(alignment: .leading) {
                    Text("My controls")
                    
                    Divider()

                    VStack(alignment: .leading) {
                        Slider(value: $sliderValue, in: 0...100)
                        Slider(value: $sliderValue, in: 0...100)
                        Slider(value: $sliderValue, in: 0...100)
                        Text("Hello")
                        Text("Some other text")
                    }
                    .disabled(false)
                    .padding(0)
                    .background(
                        RoundedRectangle(cornerRadius: 10, style: .continuous)
                            .foregroundColor(
                                .clear
                            )
                    )
                }
            }
        }
        .accentColor(.black)
        .padding()
    }   
}