SwiftUI Mac项目下, TextField默认跟随拼音输入,输入的每一个拼音都会显示在TextField的尾部。

如果外面嵌套ScrollView,TextField就无法跟随拼音输入,类似被截断效果。

问题原因可能是因为ScrollView拉长了TextField,导致输入的拼音出现截断效果。
解决方案:使用Combine监听文本框的输入状态,当输入文本时,ScrollView滚动到尾部。
TextField(
"",
text: $text
)
.onReceive(NotificationCenter.default.publisher(for: NSTextView.didChangeSelectionNotification)) { obj in
if let textView = obj.object as? NSTextView {
print("macOS: 正在输入拼音 (Marked Text)...")
scrollToEnd(proxy)
}
}
注意,这里配合ScrollViewReader和ScrollView实现滚动到尾部的效果。
