You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 14:05:29