在窗体内扩展SwiftUI的文本编辑器以使用剩余空间

fafcakar  于 2023-02-18  发布在  Swift
关注(0)|答案(1)|浏览(125)

我在窗体中使用了一个文本编辑器。

import SwiftUI
import PlaygroundSupport

struct ContentView: View {
    @State var text = String()
    
    var body: some View {
        Form {
            Section("Section") {
                Toggle("Toggle", isOn: .constant(true))
                LabeledContent("TextEditor") {
                    TextEditor(text: $text)
                }
            }
        }
    }
}
PlaygroundPage.current.setLiveView(ContentView())

这将呈现为如下形式:

由于TextEditor是一个多行输入字段,我希望它扩展到屏幕上剩余的可用空间,因此类似于

我可以通过在TextEditor中添加一个.frame(height:540)修饰符来实现这一点,但是这对extend进行了硬编码,使其不是非常动态,因此只能在特定设备上工作。
所以问题是,如何以一种动态的方式来实现这一点,这种方式适用于所有潜在的设备(不同的iPhone,iPad,...)。
注意:这个问题类似于SwiftUI Texteditor in a form,但是这只解决了如何让它显示多行的问题,使用上面提到的.frame(height:X)修饰符可以很容易地实现。

jdgnovmf

jdgnovmf1#

我不认为这是最好的解决方案,虽然它的工作.如果你想要别的东西,尝试使用GeometryReader的动态高度值存储在CGFloat变量.(测试在iPhone 14 Pro,14 Pro Max和iPad 12.9英寸)

import SwiftUI

struct ContentView: View {
    @State var text = String()
    
    var body: some View {
        if #available(iOS 16, *){
            Form {
                Section("Section") {
                    Toggle("Toggle", isOn: .constant(true))
                    LabeledContent("TextEditor") {
                        TextEditor(text: $text)
                    }.frame(minHeight: UIScreen.main.bounds.maxY-190)
                }
            }
        }
    }
}

您也可以使用常量点,因为这些点反映不同的屏幕大小和分辨率:https://stackoverflow.com/a/73653966/14856451

相关问题