Swift:在iOS显示键盘的顶部创建边框或细线

Swift:在iOS显示键盘的顶部创建边框或细线,ios,swift,autolayout,uikeyboard,Ios,Swift,Autolayout,Uikeyboard,正如主题已经提到的,我尝试在我的键盘外观上创建一条小线条。原因是,如果我在白色背景下弹出白色键盘,看起来很糟糕 一个想法是创建一条1px的细线,将其放在底部,在显示键盘时隐藏并显示,并将其与自动布局对齐。这种想法的缺点是在每个视图中都这样做 谢谢你的想法。每个UITextField和UITextView都有一个inputAccessoryView属性(继承自UIResponder超类)。当其中一个视图成为first responder且系统显示屏幕键盘时,系统将沿键盘顶部自动显示first re

正如主题已经提到的,我尝试在我的键盘外观上创建一条小线条。原因是,如果我在白色背景下弹出白色键盘,看起来很糟糕

一个想法是创建一条1px的细线,将其放在底部,在显示键盘时隐藏并显示,并将其与自动布局对齐。这种想法的缺点是在每个视图中都这样做


谢谢你的想法。

每个
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的光标将不可见。这很关键。