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

SwiftUI macOS开发中如何将两个工具栏项分别设置为居中和右侧布局

问题原因

macOS 平台的 SwiftUI 工具栏中,.principal 位置的元素默认居中基准是「工具栏总宽度扣除左右所有工具栏元素占用宽度后的剩余区域」,并非整个工具栏的绝对居中。你同时使用 .principal 和 .status 位置时,右侧 .status 的 Item B 会挤占剩余区域的宽度,导致 Item A 的居中基准左移,出现布局偏移。

解决方案

方案1:手动控制全工具栏布局(兼容性最好,适配所有 macOS 版本)

直接用单个 ToolbarItem 占满工具栏可用宽度,通过 HStack 加 Spacer 手动控制元素位置,完全规避系统 placement 的自动布局限制:

.toolbar {
    ToolbarItem(placement: .principal) {
        HStack {
            // 左侧如果有其他工具栏元素可以加在此处
            Spacer()
            Text("Item A")
            Spacer()
            Text("Item B")
        }
        .frame(maxWidth: .infinity)
        // 避免内容贴到工具栏边缘,可按需调整边距
        .padding(.horizontal, 16)
    }
}
.navigationBarTitleDisplayMode(.inline)

方案2:保留双ToolbarItem结构(适配 macOS 13+)

将右侧元素的 placement 从 .status 换成更适合普通操作项的 .primaryAction,同时给居中元素设置最大宽度约束,强制它在整个工具栏范围内居中:

.toolbar {
    ToolbarItem(placement: .principal) {
        Text("Item A")
            .frame(maxWidth: .greatestFiniteMagnitude, alignment: .center)
    }
    
    ToolbarItem(placement: .primaryAction) {
        Text("Item B")
    }
}
.navigationBarTitleDisplayMode(.inline)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:24:00