iOS - UITextField:扩展任何分辨率的底线

时间:2017-03-19 15:30:38

标签: ios iphone ipad uitextfield

我用这个创建了一个带有底线的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上的结果:

enter image description here

我不明白为什么底线不遵循UITextField。当我打电话给底线我定义为:

bottomLine.frame CGRect = (x: 0, y: usernameTextField.frame.height-7, width: usernameTextField.frame.width, height: 1)

我已指定底部线条的长度必须为:

width: usernameTextField.frame.width

有什么问题?

  

编辑1:禁区是正确的,因为UITextField适应   所有类型的决议

enter image description here

编辑:2谢谢马特!现在工作!!!

enter image description here

1 个答案:

答案 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,它将完全按照您的意愿运行。