如何创建带下划线的UITextField

use*_*716 8 storyboard uitextfield ios swift

iOS noob在这里

当我UITextField向ViewController 添加默认值时,它看起来像这样:

在此输入图像描述

我的设计师希望我UITextField看起来像这样(即背景是透明的,只有一个下划线:

在此输入图像描述

我该怎么做呢?应该要求我的设计师将图像设置为背景UITextField.图像应该是什么样的?图像应该是=蓝色背景+下划线(减去我猜的数字)

是对的吗?

更新:基于下面的方向(来自@Ashish Kakkad),将此代码添加到Swift中以添加到ViewDidLoad:

    var bottomLine = CALayer()
    bottomLine.frame = CGRectMake(0.0, view.frame.height - 1, view.frame.width, 1.0)
    bottomLine.backgroundColor = UIColor.whiteColor().CGColor
    tf_editPassword.borderStyle = UITextBorderStyle.None
    tf_editPassword.layer.addSublayer(bottomLine)
Run Code Online (Sandbox Code Playgroud)

这几乎可行,但问题是所有边界都消失了,我只想留下底线.

Ash*_*kad 10

试试这段代码:

OBJ-C

CALayer *bottomLine = [CALayer layer];
bottomLine.frame = CGRectMake(0.0f, self.frame.size.height - 1, self.frame.size.width, 1.0f);
bottomLine.backgroundColor = [UIColor whiteColor].CGColor;
[myTextField setBorderStyle:UITextBorderStyleNone];
[myTextField.layer addSublayer:bottomLine];
Run Code Online (Sandbox Code Playgroud)

迅速

var bottomLine = CALayer()
bottomLine.frame = CGRectMake(0.0, view.frame.height - 1, view.frame.width, 1.0)
bottomLine.backgroundColor = UIColor.whiteColor().CGColor
myTextField.borderStyle = UITextBorderStyle.None
myTextField.layer.addSublayer(bottomLine)
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你

如果您正在使用自动布局,请尝试在viewDidLayoutSubviews方法内执行此代码.


小智 7

将此扩展用于 UITextField

extension UITextField {

    func setUnderLine() {
        let border = CALayer()
        let width = CGFloat(0.5)
        border.borderColor = UIColor.darkGray.cgColor
        border.frame = CGRect(x: 0, y: self.frame.size.height - width, width:  self.frame.size.width - 10, height: self.frame.size.height)
        border.borderWidth = width
        self.layer.addSublayer(border)
        self.layer.masksToBounds = true
    }

}
Run Code Online (Sandbox Code Playgroud)

调用上面的函数ViewDidLoad()并用下划线显示文本字段。

myTextField.setUnderLine()
Run Code Online (Sandbox Code Playgroud)

  • 嗨,有趣且干净的解决方案,但似乎在我的情况下不起作用...我添加了扩展并在 viewDidLoad 中添加了代码,但我看不到任何更改...无论如何我没有任何更改错误所以...我不知道问题出在哪里: override func viewDidLoad() { super.viewDidLoad() txtUserName.setUnderLine(); txtPassword.setUnderLine(); (2认同)

Waf*_*les 6

要使用 Swift 3 更新它:

let bottomLine = CALayer()
bottomLine.frame = CGRect(origin: CGPoint(x: 0, y:first.frame.height - 1), size: CGSize(width: first.frame.width, height:  1))
bottomLine.backgroundColor = UIColor.white.cgColor
first.borderStyle = UITextBorderStyle.none
first.layer.addSublayer(bottomLine)
Run Code Online (Sandbox Code Playgroud)


Aru*_*Das 5

@Ashish Kakkad发布了正确的代码,但对于@ user1406716可能不起作用的原因是,当文本字段中没有文本时,框架的高度和宽度均为0,因此也许您可以尝试以下操作:

Obj-C:

CALayer *bottomLine = [CALayer layer];
bottomLine.frame = CGRectMake(0.0f, 75 - 1, 300, 1.0f);
bottomLine.backgroundColor = [UIColor whiteColor].CGColor;
[myTextField setBorderStyle:UITextBorderStyleNone];
[myTextField.layer addSublayer:bottomLine];
Run Code Online (Sandbox Code Playgroud)

斯威夫特:

var bottomLine = CALayer()
bottomLine.frame = CGRectMake(0.0, 75 - 1, 300, 1.0)
bottomLine.backgroundColor = UIColor.whiteColor().CGColor
myTextField.borderStyle = UITextBorderStyle.None
myTextField.layer.addSublayer(bottomLine)
Run Code Online (Sandbox Code Playgroud)

这将确保即使在文本字段中没有文本的情况下也可以看到该行。