swift 使用省略号截断TextField

mzaanser  于 2022-12-17  发布在  Swift
关注(0)|答案(1)|浏览(207)

我有一行TextField,我希望在末尾用省略号(...)截断多余的文本。
我尝试使用truncationMode API,但它根本不起作用,而且它还完全打乱了TextField的选择。
下面是在一个全新的普通SwiftUI MacOS项目上重现该问题的代码:(运行** Monterey RC 1、Xcode 13.1 RC 1**):

struct ContentView: View {
    @State var text = ""
    @State var text2 = ""
    
    var body: some View {
        NavigationView {
            Text("Sidebar")
            TextField("Placeholder", text: $text)
                .font(.largeTitle)
                .truncationMode(.tail)
            TextField("Click on me to lose focus", text: $text2)
                .frame(width: 100)
        }
    }
}

运行应用程序,然后在大文本框中输入一堆文本,你应该会发现文本框的选择没有修剪,但也有不稳定的行为。
我试着将NSTextFieldNSViewRepresentable一起使用,效果很好,除了我还试图将文本居中。
如果文本居中并且设置了NSTextField.lineBreakMode,则当占位符可见时光标不会转到正确的位置。
我想知道是否有人能够重现这个问题,如果是,有什么解决办法吗?

m1m5dgzv

m1m5dgzv1#

在macOS 13 Ventura中,您必须设置轴才能截断TextField。除非您设置了截断修饰符,否则轴用于在文本无法容纳在可用空间中时确定文本的滚动方向。

TextField("Placeholder", text: $text, axis: .vertical) // <- 1. use axis
    .truncationMode(.tail)  <- 2. set the truncationMode

相关问题