簡體   English   中英

SwiftUI - 擴展文本字段以填充視圖

[英]SwiftUI - Expand TextField to Fill View

我正在嘗試創建一個跨越整個 window 的 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 組件?

根據此答案和對其的評論,TextField 行限制似乎存在錯誤。

我相信在這個線程中您可以找到答案,如何實現您想要的。

我發現包裝 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)
    }
}

只是回答這個問題,因為除了包裝 UIKit 之外,沒有人給出一個像樣的答案。

TextEditor(text: $contents)

與 TextField() 相比,它會表現得像您希望的那樣是更好的路徑。 它會自動處理滾動並擴展到允許的視圖區域。

TextEditor 將要求您至少使用 iOS 14。如果您不在 iOS 14 上,那么包裝 UIKit 控件是您的最佳選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM