SwiftUI - Разверните TextField, чтобы заполнить вид - PullRequest
1 голос
/ 01 ноября 2019

Я пытаюсь создать 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)
    }
}

Снимок экрана приложения

Возможно ли это в SwiftUI или мне нужно будет вернуться к использованию устаревших компонентов AppKit?

Ответы [ 2 ]

1 голос

Кажется, что есть ошибка с линией строки TextField, согласно этому ответу и комментариям к ней.

Я верю, что в этой теме вы можете найти ответ, как добиться того, что выхочу.

0 голосов
/ 01 ноября 2019

Я обнаружил, что упаковка NSTextView по-прежнему является лучшим способом достижения чего-то похожего на то, что можно увидеть в TextEdit. Так что да, по крайней мере, теперь вам придется использовать устаревшие компоненты AppKit в вашем коде SwiftUI.

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)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...