Ios 如何根据手机设置自动布局中应用程序内键盘的不同位置';s的挡板?
我正在尝试制作一个包含日本iOS键盘副本的应用程序 我设法在interface builder中重新创建了它。我已经将关键点嵌入到它们自己的视图中,并且关键点的自动布局工作得非常完美 我的问题是,我希望键盘与系统键盘完全匹配。对于带有边框的iPhone机型,键盘视图应显示底部4像素,对于X系列iPhone,键盘视图应显示底部80像素,以说明其缺少边框 我真的不想基于iPhone模型硬编码约束。对于这两种手机,键盘的最佳定位方式是什么 有没有办法检测iPhone是否有边框Ios 如何根据手机设置自动布局中应用程序内键盘的不同位置';s的挡板?,ios,swift,autolayout,interface-builder,iphone-x,Ios,Swift,Autolayout,Interface Builder,Iphone X,我正在尝试制作一个包含日本iOS键盘副本的应用程序 我设法在interface builder中重新创建了它。我已经将关键点嵌入到它们自己的视图中,并且关键点的自动布局工作得非常完美 我的问题是,我希望键盘与系统键盘完全匹配。对于带有边框的iPhone机型,键盘视图应显示底部4像素,对于X系列iPhone,键盘视图应显示底部80像素,以说明其缺少边框 我真的不想基于iPhone模型硬编码约束。对于这两种手机,键盘的最佳定位方式是什么 有没有办法检测iPhone是否有边框 (我没有足够的rep
(我没有足够的rep来嵌入图像。) 唯一的区别是-- iPhone X系列:
bottom=KeyboardView.bottom+80
其他:
bottom=KeyboardView.bottom+4
您应该使用UIInputView控制器及其inputView
。“键盘”(输入视图)将自动出现在所有设备类型的正确位置。如果其他任何人尝试做同样的事情,我最终找到了答案
我试图让我的视图控制器覆盖canBecomeFirstResponder
以返回true
并调用self.becomeFirstResponder()
以打开键盘。
但是,由于视图控制器不是文本字段,因此它不会将键盘定位为文本键盘。如果您的自定义输入是UIPickerView,这可能会起作用,但对于文本键盘不起作用。您必须在UITextField上调用becomeFirstResponder()
,系统才能正确定位键盘
此外,设置布局约束时,不能使用
keyboardView.bottomAnchor.constraint(等同于:inputView.safeAreaLayoutGuide.bottomAnchor)])
甚至
keyboardView.bottomAnchor.constraint(等同于:inputView.safeAreaLayoutGuide.bottomAnchor)])
这会将键盘固定在底部,不会在下面留下足够的空间
以下是我的解决方案:
class KeyboardViewController: UIInputViewController {
override func viewDidLoad() {
super.viewDidLoad()
let nib = UINib(nibName: "KeyboardView", bundle: nil)
let keyboardView = nib.instantiate(withOwner: nil).first as! KeyboardView
guard let inputView = self.inputView else { return }
inputView.translatesAutoresizingMaskIntoConstraints = false
inputView.addSubview(keyboardView)
keyboardView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
keyboardView.leftAnchor.constraint(equalTo: inputView.leftAnchor),
keyboardView.topAnchor.constraint(equalTo: inputView.topAnchor),
keyboardView.rightAnchor.constraint(equalTo: inputView.rightAnchor)])
}
}
对于我的视图控制器,我只需执行以下操作:
let keyboardViewController = KeyboardViewController()
override func viewDidLoad() {
super.viewDidLoad()
textField.inputView = self.keyboardViewController.inputView
textField.becomeFirstResponder()
}
如果您有任何建议,或者知道如何在不调用文本字段上的
becomeFirstResponder()
的情况下打开键盘,请告诉我
希望这能帮到别人。谢谢你为我指明了正确的方向!我以为你只能在键盘扩展上使用它。我只是想说我在你的iOS 12编程书中通过谷歌图书找到了关于它的部分。这是一个巨大的帮助,我计划在我获得更多的iOS开发经验后再拿一本。