SwiftUI 中 TextEditor 的透明背景
Posted
技术标签:
【中文标题】SwiftUI 中 TextEditor 的透明背景【英文标题】:Transparent Background for TextEditor in SwiftUI 【发布时间】:2021-01-23 22:36:21 【问题描述】:我正在使用 SwiftUI 为 ios、iPadOS 和 macOS 构建应用程序,我需要一个具有透明背景的 TextEditor。
之前有人问过这个问题,我找到了适用于 iOS/iPadOS (Change background color of TextEditor in SwiftUI) 的好答案,但没有找到适用于 macOS 的答案。
这是我基于上面链接的代码,非常适用于 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 上为 TextEditor 获取透明背景的方法吗?
此外,已经在此处专门针对 macOS 提出了这个问题:Changing TextEditor background color in SwiftUI for macOS,但没有给出有效的答案。
【问题讨论】:
【参考方案1】:这是一个可能的解决方法。该扩展将所有 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 中 TextEditor 的透明背景的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SwiftUI TextEditor 中获取用户选择的文本
在 SwiftUI 中,为啥 Spacer 会将文本推送到 TextEditor 框架之外?
SwiftUI - 有没有办法创建一个只读的 TextEditor?
为啥我在 SwiftUI 中的 TextEditor 会忽略我的 .keyboardType?