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

如何设置SwiftUI toolbar使其在视图中垂直居中显示

解决方案

SwiftUI 内置的 Toolbar 是系统预留的导航组件,仅支持挂载在导航栏、底部栏等系统预设的固定位置,没有提供可让 ToolbarItem 垂直居中于整个视图的 placement 枚举值。要实现需求,有两种可选方案:

方案1:自定义悬浮工具栏(推荐,可实现任意位置放置)

直接放弃系统 Toolbar,改用 ZStack 层叠原有内容和自定义工具栏,即可自由控制工具栏的垂直位置:

struct ContentView: View {
    @State private var cityName = ""
        
    var body: some View {
        NavigationView {
            // ZStack实现层叠布局,可自由控制控件位置
            ZStack {
                // 原有业务内容
                VStack {
                    // 此处填写你的页面内容
                    Text("天气信息展示区域")
                }
                .navigationTitle("Weather")
                
                // 原Toolbar内的自定义控件直接放在ZStack中,默认垂直+水平居中
                HStack {
                    TextField("输入城市名称", text: $cityName)
                        .frame(minWidth: 100, idealWidth: 150, maxWidth: 240, minHeight: 30, idealHeight: 40, maxHeight: 50, alignment: .leading)
                        .textFieldStyle(.roundedBorder)
                    Spacer()
                    Button(action: {
                        // 你的点击逻辑
                    }) {
                        Image(systemName: "plus")
                            .font(.title)
                            .padding(15)
                            .foregroundColor(.white)
                            .background(Color.green)
                            .cornerRadius(40)
                    }
                }
                .padding(.horizontal, 20)
                // 如需调整垂直位置,可添加offset,负数向上偏移,正数向下偏移
                // .offset(y: -50)
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

方案2:仅导航栏区域水平居中

如果你不需要工具栏脱离导航栏位置,仅需要 ToolbarItem 在顶部导航栏内水平居中,可直接将 placement 参数设置为 .principal 即可:

ToolbarItem(placement: .principal) {
    // 你的控件内容
}

这种方式的控件依然位于顶部导航栏区域,不会移动到视图垂直居中的位置。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:45:07