UITextView可在SwiftUI中表示,不考虑ScrollView中的宽度界限

8nuwlpux  于 2023-05-21  发布在  Swift
关注(0)|答案(2)|浏览(131)

我想使用SwiftUI在UITextView中显示文本。我正在使用UIViewRepresentable,当宽度超出scrollView的界限时,会遇到问题。我想如果 Package 的文本,但它只是继续在一个长长的一行,左边和右边是不可见的:

这是我的代码:

struct ContentView: View {
    
    var messages = ["here is some long text to show the textView is not wrapping it's content"]
    
    var body: some View {
        GeometryReader { geometry in
            VStack(spacing: 0) {
                ScrollView(.vertical) {
                    ScrollViewReader { scrollView in
                        ZStack {
                            LazyVStack {
                                ForEach(messages, id: \.self) { message in
                                    TextView(text: message)
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

struct TextView: UIViewRepresentable {
    
    var text: String
     
    func makeUIView(context: Context) -> UITextView {
        let textView = UITextView()
                
        textView.font = UIFont.preferredFont(forTextStyle: UIFont.TextStyle.body)
        textView.isScrollEnabled = false
        textView.backgroundColor = .clear
        textView.isEditable = false
        
        textView.clipsToBounds = true
        
        textView.isEditable = false
        
        textView.textContainerInset = UIEdgeInsets(top: 8, left: 8, bottom: 8, right: 8)
        textView.backgroundColor = #colorLiteral(red: 0.03137254902, green: 0.4980392157, blue: 0.9960784314, alpha: 1)
        textView.textColor = UIColor.white

        textView.text = text

        return textView
    }
 
    func updateUIView(_ uiView: UITextView, context: Context) {
        
    }
}

我想知道这是否与scrollview有关。不管怎样,我想知道是否有解决办法?我试着将帧宽度设置为geometry.size.width,但没有任何效果。

vmjh9lq9

vmjh9lq91#

发生这种情况是因为您使用的是UIRepresentable视图。有一些解决方案,其中最简单的是在SwiftUI视图中的UIRepresentable视图之上使用显式.frame()
例如.frame(width: UIScreen.main.bounds.width),所以它只延伸屏幕的宽度。

kkbh8khc

kkbh8khc2#

将视图的抗压优先级设置为水平轴的.defaultLow

yourView.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)

相关问题