SwiftUI中可能存在除法器错误
我正在构建一个iOS应用程序,目前我发现Divider组件有一个奇怪的行为 请参见以下屏幕截图: 右上角的V形使其他两个(或更多)组件出现/消失,问题发生在应出现在控件A旁边的垂直分隔符上 视图的一般SwiftUI层次结构类似于ScrollView->VStack->ForEach->[HStack->Img Divider VStack(带有一些文本+控件X)] 请注意,它不仅发生在第一个组件上。 控件X包含SwiftUI组件,没有自定义项 现在,我在调试后发现了一些有趣的事实:SwiftUI中可能存在除法器错误,swiftui,Swiftui,我正在构建一个iOS应用程序,目前我发现Divider组件有一个奇怪的行为 请参见以下屏幕截图: 右上角的V形使其他两个(或更多)组件出现/消失,问题发生在应出现在控件A旁边的垂直分隔符上 视图的一般SwiftUI层次结构类似于ScrollView->VStack->ForEach->[HStack->Img Divider VStack(带有一些文本+控件X)] 请注意,它不仅发生在第一个组件上。 控件X包含SwiftUI组件,没有自定义项 现在,我在调试后发现了一些有趣的事实: 如果我使
- 如果我使用一个布尔标志使分隔符显示/消失,并在点击时更改,则分隔符将按预期显示
- 如果我使用一个布尔标志使分隔符显示/消失,该标志在“onAppear”上更改,则不会显示分隔符
- 分隔器视图的宽度为0.33,但高度为0(这才是真正的问题)
- 向“控件A”添加或删除视图可以使分隔符显示
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()
}
}