如何防止 TextEditor 在 SwiftUI 中滚动?
Posted
技术标签:
【中文标题】如何防止 TextEditor 在 SwiftUI 中滚动?【英文标题】:How to prevent TextEditor from scrolling in SwiftUI? 【发布时间】:2020-08-03 18:12:26 【问题描述】:我正在尝试创建一个 TextEditor
s 列表作为 SwiftUI 应用程序的一部分。我希望各个编辑器不要滚动,因为它们构成了一个更大的滚动列表。但是,当我将 TextEditors 添加到列表中时,它们会向下压缩,并且每个视图都可以单独滚动。是否有修饰符/技巧可以让 TextEditor 始终适合其文本内容而不滚动,所以我可以实现这一点?
我正在尝试做的一个最小示例如下:
struct ParentView: View
var items: [Item]
var body: some View
List(items, id: \.id) item in
EditorView(item: item)
struct EditorView: View
@ObservedObject var item: Item
var body: some View
TextEditor(text: $item.text)
这是在 macOS SwiftUI 应用程序中,而不是 ios 应用程序中,以防存在任何平台差异。
编辑:正如 cmets 中指出的那样,我尝试了这种方法 Dynamic row hight containing TextEditor inside a List in SwiftUI,但它似乎无法正常工作 - 行仍然没有正确扩展。
【问题讨论】:
这是否回答了您的问题***.com/questions/62620613/…? 不 - 对不起,我应该提到我尝试过这种方法,但它似乎对我不起作用。 【参考方案1】:iOS 15
可以用在init
UITextView.appearance().isScrollEnabled = false
init(para: EditorParagraph)
self._para = StateObject(wrappedValue: para)
UITextView.appearance().backgroundColor = .clear
UITextView.appearance().textDragInteraction?.isEnabled = false
UITextView.appearance().isScrollEnabled = false // here
var body: some View
ZStack
Text(para.content.isEmpty ? para.placeholder : para.content)
.font(.system(size: para.fontSize, weight: para.content.isEmpty ? .thin : .regular))
.lineSpacing(6)
.opacity(para.content.isEmpty ? 1 : 0)
.padding(.all, 8)
.frame(maxWidth: .infinity, alignment: .leading)
TextEditor(text: $para.content)
.font(.system(size: para.fontSize, weight: .regular))
.foregroundColor(.black)
.lineSpacing(6)
【讨论】:
【参考方案2】:为了解决这个问题,我最终使用.fixedSize(horizontal: false, vertical: true)
修饰符将TextEditor
修复为完整大小,然后Dynamic row hight containing TextEditor inside a List in SwiftUI 中的解决方案可以在列表中按预期工作。
【讨论】:
.fixedSize
修饰符在 iOS 14 中发挥了作用,无需使用 ZStack
和空的 Text
元素。不过,ScrollView
中没有我的。谢谢!
不幸的是它在 ios15 上不起作用【参考方案3】:
SwiftUI-Introspect 库最近增加了对TextEditor
的支持。您可以使用它来查找 TextEditor
使用的底层文本视图,并禁用该视图的滚动:
TextEditor(text: $item.text)
.introspectTextView textView in
textView.isScrollEnabled = false
【讨论】:
不适用于 macOS以上是关于如何防止 TextEditor 在 SwiftUI 中滚动?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 MacOS 的 SwiftUI 中向 TextEditor 添加焦点环
如何根据 TextEditor 的文本更改为 SwiftUI 视图设置动画?
SwiftUI 4.0 如何轻松在 iOS 16 中设置 TextEditor 背景色