我用这个创建了一个带有底线的UITextFiled:
let Bottomline CALayer = ()
bottomLine.frame CGRect = (x: 0, y: usernameTextField.frame.height-7, width: usernameTextField.frame.width, height: 1)
bottomLine.backgroundColor = UIColor.black.cgColor
TextField.borderStyle = UITextBorderStyle.none
TextField.layer.addSublayer (Bottomline)
和iPhone 6(右)的结果是:
确定。
✄------------------------
问题是在Pro iPad上运行相同的应用程序,因为 底线不会延伸到UITextField之后,而是更短
这是iPad Pro上的结果:
我不明白为什么底线不遵循UITextField。当我打电话给底线我定义为:
bottomLine.frame CGRect = (x: 0, y: usernameTextField.frame.height-7, width: usernameTextField.frame.width, height: 1)
我已指定底部线条的长度必须为:
width: usernameTextField.frame.width
有什么问题?
编辑1:禁区是正确的,因为UITextField适应 所有类型的决议
编辑:2谢谢马特!现在工作!!!
答案 0 :(得分:2)
我不明白为什么底线不遵循UITextField
因为它是一层。当超级图层(文本字段)改变大小时,图层不会自动更改大小。
因此,每次文本字段更改大小时,您都需要重新绘制底线。
目前,您正在配置"底线" viewDidLoad
中的图层。所以你基于文本字段当时的frame
。但文本领域尚未达到其实际规模。然后它 改变大小,同时你的"底线"层只是坐在那里 - 所以现在是错误的大小。
一个简单的解决方案是子类 UITextField并在每次调用layoutSubviews
时重绘该行:
class MyTextField : UITextField {
var lineLayer : CALayer?
override func layoutSubviews() {
super.layoutSubviews()
self.lineLayer?.removeFromSuperlayer()
let bottomLine = CALayer()
bottomLine.frame = CGRect(x: 0, y: self.bounds.height-7, width: self.bounds.width, height: 1)
bottomLine.backgroundColor = UIColor.black.cgColor
self.layer.addSublayer(bottomLine)
self.lineLayer = bottomLine
}
}
如果您的文本字段是MyTextField,它将完全按照您的意愿运行。