[英]SwiftUI for macOS: Expand clickable area of a TextField in a ForEach view of a List
[英]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.