我在反馈助手上向 Apple 提出了这个问题,看看他们是否有任何有用的想法。
在此对话:
我说:
如果在带有 SwiftUI 的 MACOS 上,我会这样做:
Button(action: { } ) {
Text("Press")
.padding()
.background(Color.blue)
}
我得到一个蓝色的盒子,两边有两个灰色的小点。
附图片。
这是两个灰色区域,是可点击按钮的末端。但我希望按钮是蓝色区域的形状。
相同的代码在 iOS 上可以正常工作。
(我确实看过使用 .onTapGesture 但这不会为按钮设置动画,因此您知道您已经点击了它。)
苹果说:
iOS 和 macOS 有不同的默认按钮样式——iOS 是无边框的,macOS 有标准的边框效果。
听起来您正在尝试创建自定义 ButtonStyle(因此没有任何系统提供的 chrome)。所以你要创建它,它可以将蓝色背景应用到按钮的标签上,然后将它应用到带有文本的简单按钮上,例如
Button("Press"), action {}).buttonStyle(BluePaddingButtonStyle()
这将确保它在您运行它的每个平台上都具有相同的外观。
我说:
您好,感谢您的解释。
我明白你在说什么,我对我想出的方法感到满意。
这似乎仍然不对:
Button(action: { } ) {
Text("Press")
.padding()
.background(Color.blue)
}
应该会产生一些看起来很奇怪的东西。
我不明白为什么那段代码不能只生成一个蓝色按钮。
正如我所说 - 这不是问题,因为我已经解决了它,但它
目前看起来并不直观。
苹果说:
ViewBuilder 中提供的内容用作按钮的标签:而不是整个按钮。按钮仍将带有周围的背景、边框、前景样式等,如 ButtonStyle 所述。因此,如果您的按钮需要具有非常特定的外观,那么它需要自定义该样式:要么是无边框按钮样式(但请注意,它仍然带有特定的前景外观样式),要么是自定义按钮样式。
我的想法:
这确实帮助我理解了为什么它会这样显示,但直觉上它似乎仍然是错误的!!!