SwiftUI中多个TextEditor同步变高问题的原因排查与修复求助
SwiftUI多TextEditor同步变高问题:原因及修复方案
问题原因
问题根源在于Form容器的统一尺寸布局特性:Form内部的容器(比如你用的VStack)会默认对同层级的视图应用“统一尺寸”约束,目的是让列表项保持视觉一致性。当其中一个TextEditor因内容增多扩展高度时,Form会强制同一容器内所有CustomRow的高度匹配这个变化后的高度,导致所有TextEditor同步变高。
修复方案
只需要给每个CustomRow添加.fixedSize(vertical: true, horizontal: false)修饰符,打破Form的统一尺寸约束,让每个CustomRow的垂直高度由自身内容独立计算:
修改后的核心代码
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) .fixedSize(vertical: true, horizontal: false) // 添加该行 CustomRow(title: "Option B", value: $optionB) .fixedSize(vertical: true, horizontal: false) // 添加该行 } .padding(.vertical, 20) } .navigationTitle("Testing View") .padding(.zero) } } }
(CustomRow及Preview代码保持原结构不变)
原理说明
.fixedSize(vertical: true, horizontal: false)会明确告诉SwiftUI:
- 垂直方向:视图高度由自身内容(TextEditor的实际内容高度)决定,不参与Form的统一尺寸计算
- 水平方向:保持原有的自适应布局,不限制宽度
这样每个TextEditor就会独立根据输入内容调整高度,同时保留你设置的minHeight:50, maxHeight:200高度限制,不会再出现同步变高的问题。
内容的提问来源于stack exchange,提问作者Ariel Antonio Fundora
相关产品推荐
相关产品推荐

