在 SwiftUI 中,为啥 Spacer 会将文本推送到 TextEditor 框架之外?

Posted

技术标签:

【中文标题】在 SwiftUI 中,为啥 Spacer 会将文本推送到 TextEditor 框架之外?【英文标题】:In SwiftUI, why does a Spacer push the text outside of the TextEditor frame?在 SwiftUI 中,为什么 Spacer 会将文本推送到 TextEditor 框架之外? 【发布时间】:2021-02-02 04:07:48 【问题描述】:

在下面的代码中,为什么 TextEditor 的框架停留在安全区域内,而文本被推到屏幕顶部,超出安全区域,在 TextEditor 的框架之外?

VStack 
    TextEditor(text: $myText)
        .frame(height: 200)
        .border(Color.red)
    Spacer()

【问题讨论】:

【参考方案1】:

你必须使用.padding()来调整文本框。

添加填充就像在 UITextView 中添加 textContainerInset

这样

struct TestFrameView: View 
    
    @State private var myText: String = "Hello"
    
    var body: some View 
        VStack 
            TextEditor(text: $myText)
                .padding() //<-- here or .padding(.top, 0.1) for zero space.
                .frame(height: 200)
                .border(Color.red)
            Spacer()
        
    

【讨论】:

确实可以解决问题,谢谢您的回答。我仍然不明白为什么文本被推出框架。 Spacer 对 TextEditor 框架和 TextEditor 内部文本的作用是否不同? @rawbee 我认为这是一个 50% 的错误。是的,它就像一个 TextEditor 框架和 Text 内部,因为通过设置填充,您可以更改 Text 的位置。

以上是关于在 SwiftUI 中,为啥 Spacer 会将文本推送到 TextEditor 框架之外?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swiftui 的主视图底部的滚动视图中放置一个非粘性按钮? Spacer 在滚动视图中似乎没有效果

带有灵活 Spacer 的 SwiftUI VStack

为啥我的 SwiftUI 动画在旋转时恢复到前一帧?

在 SwiftUI 中,Picker 扩展为占据 HStack 内的整个空间

在 SwiftUI 的 List 行中添加形状

SwiftUI,删除VStack中视图之间的空间?