Xcode13中Button仅bold字重生效如何设置其他字重?
问题成因
- 你的代码存在重复的
.font修饰符,SwiftUI 中后添加的修饰符会覆盖前序同名配置,你写的.font(.title.bold())会被后续的.font(.title3)完全覆盖,仅保留系统默认的title3字体样式。 - Xcode 13 对应的SwiftUI版本中,Button的默认样式会拦截外层挂载的字体字重配置,只有
bold()粗体效果因为是系统按钮默认触发的高优先级样式可以生效,medium、regular等其他字重会被默认样式过滤,不会应用到内部文本上。
修复方案
不要把字体、字重、文本颜色这类文本相关配置挂在Button外层,直接在Button的Label闭包里给Text显式设置对应样式即可,所有字重都能正常生效,参考代码如下:
Button { // 在这里写登录按钮的点击逻辑 } label: { Text("Login") // 要切换字重直接改weight参数即可,支持regular/medium/semibold等所有系统字重 .font(.title3.weight(.medium)) .foregroundColor(.white) } .padding(20) .frame(maxWidth: .infinity) .background(Color("ButtonColor")) .cornerRadius(4.0)
注意事项
- 避免给同一个视图重复添加
.font修饰符,防止配置被意外覆盖 - Xcode 13 环境下所有涉及文本的样式(字体、字重、颜色、行间距等),优先直接设置在
Text组件上,不要依赖外层视图的样式继承,就能规避大部分按钮文本样式不生效的问题。
内容的提问来源于stack exchange,提问作者porpoising
相关产品推荐
相关产品推荐

