如何在SwiftUI TextField中加粗文本?

52

截至 Xcode 11.2.1,SwiftUI 中没有为 textfield 提供内置的字重修改器。

如果不使用扩展 UITextField 作为 UIViewRepresentable,我们该如何引入字重?

6个回答

97

使用适用于SwiftUI TextField的标准字体大小选项和权重的一般方法。例如:

TextField("Name", text: $name)
  .font(Font.headline.weight(.light))

可用的标准尺寸选项(从小到大):

.caption
.footnote
.subheadline
.callout
.body
.headline
.title3
.title2
.title
.largeTitle

可用的标准字重(从最轻到最重):

.ultralight
.thin
.light
.regular
.medium
.semibold
.bold
.heavy
.black

最佳答案也支持动态类型。如果可能的话,请不要使用固定字体大小。 - smat88dd
这种方法的唯一问题是它硬编码了 Font.headline,覆盖了默认设置。在 iOS 16 上有 .fontWeight(),但对于 iOS 15 来说,这可能是一个合理的解决方案。 - Calin

36

更新的答案:

        Text("Bold Text").bold()

        Text("**Bold Text**")
        Text("*Italic Text*")
        Text("***Bold Italic Text***")

enter image description here



import SwiftUI

struct ContentView: View {
    @State var TextValue: String = "Hello"
    
    var body: some View {
        VStack {
            TextField("placeholder", text: $TextValue)
            .padding(.horizontal, 50)
                .font(.system(size: 30, weight: .heavy, design: .default))
        }
    }
}

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

enter image description here


1
很遗憾,这种做法破坏了动态类型,因为使用固定字体大小,不建议这样做。 - smat88dd
我不喜欢这个例子中的 .font(.system(size: 30, weight: .heavy, design: .default)) 是因为我们必须定义字体大小。如果我们只想遵循预定义的 .title .body 字体大小的指南,那么这种方法并不理想。 - Trevor

24

iOS 15+

SwiftUI支持Markdown。

在文本/字符两侧添加双星号(**),可以使其变为粗体。

Text("**This text is bold**")

为了强调文本内容,请使用下划线

Text("_This text is italic_")

5
重要提示:这不是Swift的功能,而是iOS的功能!它只能在iOS 15上运行!使用旧版本的用户将看到原始的Markdown文本。 - FreeNickname
有没有办法将这些星号中的文本的权重加重,比粗体更重? - Joseph
@Joseph。不,截至今天还不可能。请改用.fontWeight(.black) - mahan
适用于字符串字面量。如何使其适用于字符串变量? - Abdurrahman Mubeen Ali
@AbdurrahmanMubeenAli https://dev59.com/ZFIH5IYBdhLWcg3wA315#67922456 - mahan

21
TextField("Name", text: $name)
    .font(Font.body.bold())

11

iOS 13.0+、macOS 10.15+、tvOS 13.0+和watchOS 6.0+ 的更新方法是:

.fontWeight(.bold)

3
这在TextField上不起作用,所以这并不是问题的真正答案。 - pawello2222
2
我的错误。fontWeight适用于Text视图,但不适用于TextFields,因为它们不公开其标签视图。因此.font(Font.body.bold())仍然是最简单的解决方案 :( - A.I.A.

2

shawnynicole的回答的基础上,您可以创建一个扩展程序:

extension View {
    func bold() -> some View {
        font(Font.body.bold())
    }
}

并将其应用于任何视图(包括TextField):

TextField("Text", text: $text)
    .bold()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接