SwiftUI 中文本编辑器的透明背景
Transparent Background for TextEditor in SwiftUI
我正在使用 SwiftUI 为 iOS、iPadOS 和 macOS 构建应用程序,我需要一个具有透明背景的文本编辑器。
这个问题之前有人问过,我找到了 iOS/iPadOS () 的一个很好的答案,但是 none for macOS.
这是我基于上面的 link 编写的代码,非常适合 iOS 和 iPadOS:
TextEditor(text: $text)
.foregroundColor(.black)
.onAppear {
#if os(macOS)
// ??
#else
UITextView.appearance().backgroundColor = .clear
#endif
}
NSTextView
似乎没有 UITextView.appearance()
的等价物,所以我不太确定该怎么做。
使用 .background(Color.clear)
也不起作用:
TextEditor(text: $text)
.foregroundColor(.black)
.background(Color.clear)
.onAppear {
#if os(macOS)
// ??
#else
UITextView.appearance().backgroundColor = .clear
#endif
}
有谁知道在 macOS 上为文本编辑器获取透明背景的方法吗?
此外,这个问题已经在此处专门针对 macOS 提出:,但没有给出有效的答案。
这里有一个可能的解决方法。该扩展程序将所有 TextViews 背景设置为 .clear
,然后您可以使用 .background()
修饰符更改背景颜色。
import SwiftUI
extension NSTextView {
open override var frame: CGRect {
didSet {
backgroundColor = .clear //<<here clear
drawsBackground = true
}
}
}
struct ContentView: View {
@State var string: String = ""
var body: some View {
TextEditor(text: $string)
.textFieldStyle(PlainTextFieldStyle())
.background(Color.red) //<< here red
}
}
我正在使用 SwiftUI 为 iOS、iPadOS 和 macOS 构建应用程序,我需要一个具有透明背景的文本编辑器。
这个问题之前有人问过,我找到了 iOS/iPadOS (
这是我基于上面的 link 编写的代码,非常适合 iOS 和 iPadOS:
TextEditor(text: $text)
.foregroundColor(.black)
.onAppear {
#if os(macOS)
// ??
#else
UITextView.appearance().backgroundColor = .clear
#endif
}
NSTextView
似乎没有 UITextView.appearance()
的等价物,所以我不太确定该怎么做。
使用 .background(Color.clear)
也不起作用:
TextEditor(text: $text)
.foregroundColor(.black)
.background(Color.clear)
.onAppear {
#if os(macOS)
// ??
#else
UITextView.appearance().backgroundColor = .clear
#endif
}
有谁知道在 macOS 上为文本编辑器获取透明背景的方法吗?
此外,这个问题已经在此处专门针对 macOS 提出:
这里有一个可能的解决方法。该扩展程序将所有 TextViews 背景设置为 .clear
,然后您可以使用 .background()
修饰符更改背景颜色。
import SwiftUI
extension NSTextView {
open override var frame: CGRect {
didSet {
backgroundColor = .clear //<<here clear
drawsBackground = true
}
}
}
struct ContentView: View {
@State var string: String = ""
var body: some View {
TextEditor(text: $string)
.textFieldStyle(PlainTextFieldStyle())
.background(Color.red) //<< here red
}
}