我试图在SwiftUI中构建一个聊天视图,并且我希望将输入视图附加到键盘上,这样当我通过拖动鼠标退出键盘时,视图就会随之移动。
当我使用UIKit时,我覆盖了ViewController的inputAccessoryView。SwiftUI也有类似的可能吗?
编辑:我已经看到我可以为这个文本字段添加一个UIKit TextField和一个InputAccessory。不过,这不是我想做的。我希望在我的inputAccessoryView视图中有一个全局SwiftUI,并将我的自定义输入视图添加为一个子视图,这样它总是可见的,而不是添加到我的TextField中。
发布于 2022-01-05 01:09:18
我看到了你想要的行为的两种可能的解决方案。
在某些情况下,automatically
1:在swiftUI中,默认情况下视图有几个安全区域。其中之一是键盘安全区。当键盘被隐藏时,该区域占据设备的全屏,但当显示键盘时,该区域缩小到屏幕的非键盘区域。因此,在下面的示例代码中,当键盘出现时,文本字段应该移动到键盘上方,当键盘消失时,文本字段应该向下移动(当键盘处于较小的浮动模式时,这在iPad上不起作用)。
VStack {
ScrollView {
ForEach(0 ..< 50) { item in
Text("Demo Text")
.frame(maxWidth: .infinity)
}
}
TextField("Enter Text", text: $messageText)
}2:在iOS 15+中,可以在键盘位置创建工具栏。这在本质上就像InputAccessoryView在UIKit中所做的那样。这与方法1的不同之处在于,这里的视图仅在显示键盘时才会出现。对此的一个解释是,当有线或无线键盘连接到iPhone或iPad时,工具栏视图仍将显示在屏幕底部。
.toolbar {
ToolbarItemGroup(placement: .keyboard) {
Text("Apears at top of keyboard")
}
}因此,将1和2放在一起,这里有一个实现两者的示例。您可以在Xcode中运行它,以帮助理解这两个方法的行为。
VStack {
ScrollView {
ForEach(0 ..< 50) { item in
Text("Demo Text")
.frame(maxWidth: .infinity)
}
}
TextField("Enter Text", text: $messageText)
}
.toolbar {
ToolbarItemGroup(placement: .keyboard) {
Text("Apears at top of keyboard")
}
}https://stackoverflow.com/questions/68369733
复制相似问题