Swift使输入透明,只有border-bottom

时间:2017-01-31 04:31:47

标签: ios swift

如何创建一个透明背景且只有边框底部的textField?

我试过这段代码:

textField.backgroundColor = .clear
let border = CALayer()
let width = CGFloat(2.0)
border.borderColor = UIColor.darkGrayColor().CGColor
border.frame = CGRect(x: 0, y: textField.frame.size.height - width, width:  textField.frame.size.width, height: textField.frame.size.height)
border.borderWidth = width
textField.layer.addSublayer(border)
textField.layer.masksToBounds = true

但它不起作用。

6 个答案:

答案 0 :(得分:6)

这是使用UIView而不是CALayer的替代实现。

let line = UIView()
line.frame.size = CGSize(width: textField.frame.size.width, height: 1)
line.frame.origin = CGPoint(x: 0, y: textField.frame.maxY - line.frame.height)
line.backgroundColor = UIColor.darkGray
line.autoresizingMask = [.flexibleWidth, .flexibleTopMargin]
textField.addSubview(line)

答案 1 :(得分:3)

您的代码是正确的。问题只出现在你的边框高度,现在是" textField.frame.size.height"将其更改为1.0。(更改边框框架代码)。

答案 2 :(得分:2)

请试试这个:

txtField .borderStyle = .none

它可能对你有帮助.... :)

答案 3 :(得分:1)

extension UITextField {
    func setBottomBorder(borderColor: CGColor = UIColor.white.cgColor,
        backgroundColor: CGColor = UIColor.clear.cgColor) {
        self.borderStyle = .none
        self.layer.backgroundColor = backgroundColor

        let border = CALayer()
        let width = CGFloat(2.0)
        border.borderColor = borderColor
        border.frame = CGRect(x: 0, y: self.frame.size.height - width, width:  self.frame.size.width, height: self.frame.size.height)
        border.borderWidth = width
        self.layer.addSublayer(border)
        self.layer.masksToBounds = true
    }
}

这对我有用。

然后你可以打电话

yourTextField.SetBottomBorder(borderColor: UIColor.white.cgColor, backgroundColor: UIColor.clear.cgColor)

答案 4 :(得分:0)

只需在代码中添加以下内容: -

   border.backgroundColor = UIColor.black.cgColor

答案 5 :(得分:0)

这段代码似乎对我来说工作正常,设置backgroundColor以清除修复此

textField.backgroundColor = .clear