出于我正在构建的应用程序的目的,我需要一个填充手机屏幕且始终可滚动的文本编辑器。
由于我想要对文本格式和视图的滚动行为进行一些额外的控制,所以我选择使用
UITextView
包裹在 UIViewRepresentable
中,而不是来自 TextEditor
的非常基本的 SwiftUI
.
虽然我需要的默认滚动行为是
TextEditor
上的默认行为,但在 UITextView
中似乎根本不会发生,直到我手动输入足够的字符以使视图需要它。
我尝试强制一些明显的变量并尝试设置
UITextView
的框架,但没有成功(后者似乎根本没有做任何事情)。
如何制作一个
UITextView
来模仿 TextEditor
的始终可滚动行为?
import SwiftUI
struct SwiftUIView: View {
var body: some View {
VStack {
TextView()
}
}
}
struct TextView: UIViewRepresentable {
func makeUIView(context: Context) -> UITextView {
let textView = UITextView(frame: CGRect(x: 0, y: 0, width: 100, height: 600)) // For example, doesn't seem to make any difference to the height
textView.font = .systemFont(ofSize: 32, weight: .bold)
textView.isScrollEnabled = true
textView.isUserInteractionEnabled = true
textView.showsVerticalScrollIndicator = true
return textView
}
func updateUIView(_ uiView: UITextView, context: Context) {}
}
UITextView
扩展了 UIScrollView
,它具有一些“反弹”相关的属性。
只需将
alwaysBounceVertical
属性设置为 true
即可给出您正在寻找的行为。如果需要,请添加 alwaysBounceHorizontal
。
struct TextView: UIViewRepresentable {
func makeUIView(context: Context) -> UITextView {
let textView = UITextView(frame: CGRect(x: 0, y: 0, width: 100, height: 600)) // For example, doesn't seem to make any difference to the height
textView.font = .systemFont(ofSize: 32, weight: .bold)
textView.alwaysBounceVertical = true // This adds vertical bounce
return textView
}
func updateUIView(_ uiView: UITextView, context: Context) {}
}