SwiftUI-展开文本字段以填充视图

时间:2019-11-01 06:18:55

标签: swiftui

我正在尝试创建一个横跨整个窗口的TextField。当前,它仅扩展以填充水平轴上的视图。我的目标是实现与TextEdit相似的功能。

到目前为止,这是我的代码:

struct ContentView: View {
    @State var contents: String = "Hello World\nThis is a test.";

    var body: some View {
        VStack() {
            TextField("Notes", text: $contents)
                .lineLimit(nil)
        }
        .frame(height: 600)
    }
}

Application Screenshot

在SwiftUI中是否可行?还是需要恢复使用旧版AppKit组件?

2 个答案:

答案 0 :(得分:1)

根据此answer和对此的评论,看来存在TextField行限制的错误。

我相信您可以在此线程中找到答案,以及如何实现所需的目标。

答案 1 :(得分:0)

我发现包装NSTextView仍然是实现与TextEdit类似的最佳方法。因此,是的,至少现在您必须在SwiftUI代码中使用旧版AppKit组件。

struct MultilineTextView: NSViewRepresentable {
    typealias NSViewType = NSTextView

    @Binding var text: String

    func makeNSView(context: Self.Context) -> Self.NSViewType{
        let view = NSTextView()
        view.isEditable = true
        view.isRulerVisible = true
        return view
    }

    func updateNSView(_ nsView: Self.NSViewType, context: Self.Context) {
        nsView.string = text
    }
}


struct ContentView: View {
    @State var contents: String = "Hello World\nThis is a test.";

    var body: some View {
        VStack() {
            MultilineTextView(text: $contents)
        }.background(Color.white)
    }
}