Как изменить размер шрифта NSTextField при использовании в SwiftUI
Ниже представлено демонстрационное приложение с простым
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))
Любые идеи?
1 ответ
Это особенно странно:
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 {}
}
}
Может быть, кто-то придумает более чистое решение, но вы правы - нормальные методы просто установить
Итак, мое решение - подкласс
Немного хакерский, но он работает.