在 SwiftUI 中使用时如何更改 NSTextField 字体大小
How to Change NSTextField Font Size When Used in SwiftUI
下面是一个演示应用程序,在 Mac 应用程序中包含一个简单的 NSTextField
。出于某种原因,无论我尝试什么,字体大小都不会改变。
import Cocoa
import SwiftUI
@main
struct SwiftUIWindowTestApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
struct ContentView: View {
@State private var text = "Text goes here..."
var body: some View {
FancyTextField(text: $text)
.padding(50)
}
}
struct FancyTextField: NSViewRepresentable {
@Binding var text: String
func makeNSView(context: Context) -> NSTextField {
let textField = NSTextField()
textField.font = NSFont.systemFont(ofSize: 30) //<- Not working
return textField
}
func updateNSView(_ nsView: NSTextField, context: Context) {
nsView.stringValue = text
}
}
这就是整个应用程序。在这个简单的示例中,我没有做任何其他事情。我可以更改文本颜色和其他属性,但由于某些原因字体大小没有改变。
一时兴起,我也尝试在 SwiftUI 端对其进行更改,但我没想到它会起作用(而且它不起作用):
FancyTextField(text: $text)
.font(.system(size: 20))
有什么想法吗?
这是一个特别奇怪的:
struct FancyTextField: NSViewRepresentable {
@Binding var text: String
func makeNSView(context: Context) -> NSTextField {
let textField = MyNSTextField()
textField.customSetFont(font: .systemFont(ofSize: 50))
return textField
}
func updateNSView(_ nsView: NSTextField, context: Context) {
nsView.stringValue = text
}
}
class MyNSTextField : NSTextField {
func customSetFont(font: NSFont?) {
super.font = font
}
override var font: NSFont? {
get {
return super.font
}
set {}
}
}
也许有人会想出一个更简洁的解决方案,但你是对的——在 NSTextField 上设置 .font
的常规方法似乎在这里不起作用。这似乎是因为外部元素(调试器没有给我很好的提示)试图将字体设置为系统字体大小 13。
所以,我的解决方案是继承 NSTextField
并使 font
的 setter 不响应。然后,我定义了一个自定义的 setter 方法,所以要达到真正的 setter 的唯一方法是通过我的自定义方法。
有点老套,但很管用。
下面是一个演示应用程序,在 Mac 应用程序中包含一个简单的 NSTextField
。出于某种原因,无论我尝试什么,字体大小都不会改变。
import Cocoa
import SwiftUI
@main
struct SwiftUIWindowTestApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
struct ContentView: View {
@State private var text = "Text goes here..."
var body: some View {
FancyTextField(text: $text)
.padding(50)
}
}
struct FancyTextField: NSViewRepresentable {
@Binding var text: String
func makeNSView(context: Context) -> NSTextField {
let textField = NSTextField()
textField.font = NSFont.systemFont(ofSize: 30) //<- Not working
return textField
}
func updateNSView(_ nsView: NSTextField, context: Context) {
nsView.stringValue = text
}
}
这就是整个应用程序。在这个简单的示例中,我没有做任何其他事情。我可以更改文本颜色和其他属性,但由于某些原因字体大小没有改变。
一时兴起,我也尝试在 SwiftUI 端对其进行更改,但我没想到它会起作用(而且它不起作用):
FancyTextField(text: $text)
.font(.system(size: 20))
有什么想法吗?
这是一个特别奇怪的:
struct FancyTextField: NSViewRepresentable {
@Binding var text: String
func makeNSView(context: Context) -> NSTextField {
let textField = MyNSTextField()
textField.customSetFont(font: .systemFont(ofSize: 50))
return textField
}
func updateNSView(_ nsView: NSTextField, context: Context) {
nsView.stringValue = text
}
}
class MyNSTextField : NSTextField {
func customSetFont(font: NSFont?) {
super.font = font
}
override var font: NSFont? {
get {
return super.font
}
set {}
}
}
也许有人会想出一个更简洁的解决方案,但你是对的——在 NSTextField 上设置 .font
的常规方法似乎在这里不起作用。这似乎是因为外部元素(调试器没有给我很好的提示)试图将字体设置为系统字体大小 13。
所以,我的解决方案是继承 NSTextField
并使 font
的 setter 不响应。然后,我定义了一个自定义的 setter 方法,所以要达到真正的 setter 的唯一方法是通过我的自定义方法。
有点老套,但很管用。