如何使用可表示的 Swift UI 视图强制空 UITextView 可滚动

问题描述 投票:0回答:1

出于我正在构建的应用程序的目的,我需要一个填充手机屏幕且始终可滚动的文本编辑器。

由于我想要对文本格式和视图的滚动行为进行一些额外的控制,所以我选择使用

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) {}
}
ios swift swiftui uikit
1个回答
0
投票

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) {}
}
© www.soinside.com 2019 - 2024. All rights reserved.