我有个问题.我有几个TextEditing的视图.输入它们中的任何一个都会改变所有它们的高度.

你知道会发生什么吗?你知道如何修复它吗?

Example Code:

    import SwiftUI

    struct TestingView: View {

        @State var optionA = ""
        @State var optionB = ""

        @State private var comment = ""
        
        var body: some View {
            NavigationStack {
                Form {
                    VStack() {
                        CustomRow(title: "Option A", value: $optionA)
                        CustomRow(title: "Option B", value: $optionB)
                    }
                    .padding(.vertical, 20)
                }
                .navigationTitle("Testing View")
                .padding(.zero)
            }
        }
    }

    struct CustomRow: View {

        var title: String = ""
        @Binding var value: String

        var body: some View {
            VStack(alignment: .leading) {
                Text(title)
                    .font(.system(.headline, design: .rounded))
                    .foregroundColor(.gray)
                    .listRowSeparator(.hidden)

                ZStack {
                    TextEditor(text: $value)
                        .padding(4)
                        .autocapitalization(.none)
                        .disableAutocorrection(true)
                        .textFieldStyle(.roundedBorder)
                        .font(.system(.body, design: .rounded))
                        .frame(minHeight: 50, maxHeight: 200)

                }
                .overlay(
                    RoundedRectangle(cornerRadius: 4)
                        .stroke(.gray, lineWidth: 1)
                )
            }
            .padding(.bottom, 10)
        }
    }

    struct TestingView_Previews: PreviewProvider {
        static var previews: some View {
            TestingView()
        }
    }

推荐答案

I think这是因为VStack试图通过在垂直轴上均匀地分布它们来布置其视图,只要有可能.由于您为文本编辑器提供了介于50和200之间的灵活高度,因此可以拉伸它们,使两个文本编辑器的高度相等.

根据试错法,您可以通过在VStack上添加垂直fixedSize来解决此问题:

VStack() {
    CustomRow(title: "Option A", value: $optionA)
    CustomRow(title: "Option B", value: $optionB)
}
.padding(.vertical, 20)
.fixedSize(horizontal: false, vertical: true)

但我只会将其作为表单的两个单独行来执行,并隐藏列表分隔符.如果您想要垂直填充,请将它们分别添加到每个CustomRow:

Form {
    Group {
        CustomRow(title: "Option A", value: $optionA)
            .padding(.top, 20)
        CustomRow(title: "Option B", value: $optionB)
            .padding(.bottom, 20)
    }
    .listRowSeparator(.hidden)
}
.navigationTitle("Testing View")
.padding(.zero)

Ios相关问答推荐

第三方框架的iOS隐私声明

如何解释在SwiftUI视图中观察到持续的数据更改

GraphQL iOS Apollo客户端自动持久化查询导致崩溃

JSON响应中的键有时为Int,有时为字符串

拖动手势导致 sim 崩溃 Swift UI

将 Riverpod 从 StateNotifier 修复为 NotifierProvider 以及应用程序生命周期监控

如何在SwiftUI中实现淡入淡出加粘标题屏幕效果

圆角矩形路径上的蛇形动画

SwiftUI - TextField - 在焦点上清除 Double 类型的值,在取消 Select 时恢复

.frame() 修饰符的位置如何影响视图?

从iOS键盘输入时Flutter TextField输入消失

叠加视图不在堆栈中维护自身 - SwiftUI

XCode 14 Beta 中 NavigationStack 的正文渲染问题

滑动以返回特定的 SwiftUI 视图

如何告诉 SwiftUI 视图绑定到嵌套的 ObservableObjects

快速禁用 UITextfield 的用户输入

如何隐藏uitabbar控制器

什么是伞头?

闭包不能隐式捕获变异的 self 参数

如何防止 iOS 设备上的显示屏变暗和关闭?