Swift:在iOS显示键盘的顶部创建边框或细线
正如主题已经提到的,我尝试在我的键盘外观上创建一条小线条。原因是,如果我在白色背景下弹出白色键盘,看起来很糟糕 一个想法是创建一条1px的细线,将其放在底部,在显示键盘时隐藏并显示,并将其与自动布局对齐。这种想法的缺点是在每个视图中都这样做Swift:在iOS显示键盘的顶部创建边框或细线,ios,swift,autolayout,uikeyboard,Ios,Swift,Autolayout,Uikeyboard,正如主题已经提到的,我尝试在我的键盘外观上创建一条小线条。原因是,如果我在白色背景下弹出白色键盘,看起来很糟糕 一个想法是创建一条1px的细线,将其放在底部,在显示键盘时隐藏并显示,并将其与自动布局对齐。这种想法的缺点是在每个视图中都这样做 谢谢你的想法。每个UITextField和UITextView都有一个inputAccessoryView属性(继承自UIResponder超类)。当其中一个视图成为first responder且系统显示屏幕键盘时,系统将沿键盘顶部自动显示first re
谢谢你的想法。每个
UITextField
和UITextView
都有一个inputAccessoryView
属性(继承自UIResponder
超类)。当其中一个视图成为first responder且系统显示屏幕键盘时,系统将沿键盘顶部自动显示first responder的inputAccessoryView
。例如,带有左右箭头和“完成”按钮的黑色条是一个inputAccessoryView
因此,在键盘顶部绘制细线的最简单方法可能是创建一个单点高视图,并将其设置为文本字段或文本视图的
inputAccessoryView
。将附件视图的背景色设置为深色。每个UITextField
和UITextView
都有一个inputAccessoryView
属性(继承自UIResponder
超类)。当其中一个视图成为first responder且系统显示屏幕键盘时,系统将沿键盘顶部自动显示first responder的inputAccessoryView
。例如,带有左右箭头和“完成”按钮的黑色条是一个inputAccessoryView
因此,在键盘顶部绘制细线的最简单方法可能是创建一个单点高视图,并将其设置为文本字段或文本视图的
inputAccessoryView
。将附件视图的背景色设置为深色。正如Rob所写,附件视图是正确且最平滑的解决方案,因为Apple以正确的方式解决了所有动画、显示等问题,因此无需担心其他问题
我把它作为扩展解决了。我希望它在底部显示一个小设备,因此我有一个封闭的数字键盘:
Swift 2.0:
extension UITextField {
override public func becomeFirstResponder() -> Bool {
self.addSeparatorInputAccessoryIfNumericKeyboardOnPhone()
return super.becomeFirstResponder()
}
func addSeparatorInputAccessoryIfNumericKeyboardOnPhone() {
guard self.keyboardType == .NumberPad else {
return
}
guard UIDevice.currentDevice().userInterfaceIdiom == .Phone else {
return
}
let view = UIView(frame: CGRectMake(0, 0, 0, 1 / UIScreen.mainScreen().scale))
view.backgroundColor = UIColor.lightGrayColor()
self.inputAccessoryView = view
}
}正如Rob所写,AccessoryView是正确且最流畅的解决方案,因为苹果以正确的方式解决了所有动画、显示等问题,因此无需担心其他问题 我把它作为扩展解决了。我希望它在底部显示一个小设备,因此我有一个封闭的数字键盘: Swift 2.0:
extension UITextField {
override public func becomeFirstResponder() -> Bool {
self.addSeparatorInputAccessoryIfNumericKeyboardOnPhone()
return super.becomeFirstResponder()
}
func addSeparatorInputAccessoryIfNumericKeyboardOnPhone() {
guard self.keyboardType == .NumberPad else {
return
}
guard UIDevice.currentDevice().userInterfaceIdiom == .Phone else {
return
}
let view = UIView(frame: CGRectMake(0, 0, 0, 1 / UIScreen.mainScreen().scale))
view.backgroundColor = UIColor.lightGrayColor()
self.inputAccessoryView = view
}
}最简单的方法是在成为第一响应者且系统显示屏幕键盘时为TextField添加InputAccessoryView 试试这个: Swift 3:
最简单的方法是在成为第一响应者且系统显示屏幕键盘时为TextField添加InputAccessoryView 试试这个: Swift 3:
你有没有考虑过使用定制键盘?@LyndseyScott听起来有点过分:看看下面rob的回答。@NicolasMiari,OP说这是“一个想法”所以我认为他有很多,可能会想用其他方式来定制——比如,不同的背景色。一个解决他的要求的想法是,用一个像素线将键盘和背景分开,而不是别的。他只需要一条线。没有定制键盘。你考虑过使用定制键盘吗?@LyndseyScott听起来有些过分:看看下面rob的回答。@NicolasMiari OP说这是“一个想法”所以我认为他有很多,可能会想用其他方式来定制——比如,不同的背景色。一个解决他的要求的想法是,用一个像素线将键盘和背景分开,而不是别的。他只需要一条线。没有自定义键盘。是的,这是正确的,我接受你的答案,我只是添加一些代码让人们更容易跟进。是的,这是正确的,我接受你的答案,我只是添加了一些代码让人们更容易跟进。是否建议覆盖扩展中的方法?这对我来说很有效,但会产生另一个问题。添加此扩展名后,TextField的光标将不可见。这很关键。是否建议覆盖扩展中的方法?这对我来说很有效,但会产生另一个问题。添加此扩展名后,TextField的光标将不可见。这很关键。