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

SwiftUI中Sheet内Form无法占满全屏的问题求助

解决SwiftUI Sheet中Form占满全屏的问题

SwiftUI的Sheet默认带有安全区域边距,同时Form组件本身会自带行内边距和列表样式间距,导致Form无法完全填充Sheet边缘。以下是直接可行的修改方案:

修改后的FormView代码

import SwiftUI

struct FormView: View {
    @State var title: String = ""

    var body: some View {
        Form {
            Text("Title")
                .multilineTextAlignment(.leading)
                .listRowSeparator(.hidden)
                .listRowInsets(EdgeInsets()) // 移除行默认内边距
                .frame(maxWidth: .infinity, alignment: .leading)
            
            TextField("", text: $title)
                .textInputAutocapitalization(.never)
                .listRowSeparator(.hidden)
                .listRowInsets(EdgeInsets()) // 移除行默认内边距
                .padding([.leading, .trailing], 16) // 手动添加合适内边距(按需调整)
                .frame(maxWidth: .infinity, alignment: .leading)
        }
        .listStyle(.plain) // 消除Form分组样式的额外间距
        .padding(0) // 移除Form自身的默认padding
    }
}

修改后的Sheet调用代码

struct CreateItemButton: View {
    @State var shouldPresentSheet = false
    
    var body: some View {
        Button("Raise Issue", action: {
            shouldPresentSheet = true
        })
        .sheet(isPresented: $shouldPresentSheet) {
            FormView()
                .edgesIgnoringSafeArea(.all) // 让内容穿透Sheet的安全区域边界
        }
    }
}

核心修改说明

  • .edgesIgnoringSafeArea(.all):添加到Sheet内的FormView上,消除Sheet自带的安全区域边距限制
  • .listRowInsets(EdgeInsets()):给Form的每一行设置,移除系统默认的行内边距
  • .listStyle(.plain):切换Form的列表样式,去掉分组样式带来的上下左右间距
  • .padding(0):移除Form自身的默认padding,确保横向完全填充Sheet宽度

内容的提问来源于stack exchange,提问作者Molina12

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 23:10:07