Swift

时间:2016-10-09 03:14:27

标签: ios swift uitextfield

我有一个关于在UITextField上设置下划线的问题。 我试图在每一端用条形下划线,如下所示。

enter image description here

我尝试了以下内容并得到了这个。右端没有酒吧。

enter image description here

extension UITextField {
func underline() {
    let borderWidth = CGFloat(1.0)
    let endBorderHeight = CGFloat(10.0)

    let bottom = CALayer()
    bottom.frame = CGRect(
        x: 1,
        y: self.frame.height - borderWidth,
        width: self.frame.width - 2,
        height: borderWidth)

    bottom.borderWidth = borderWidth
    bottom.borderColor = UIColor.lightGrayColor().CGColor

    let leftEndBorder = CALayer()
    leftEndBorder.frame = CGRect(
        x: 0,
        y: self.frame.height - endBorderHeight,
        width: borderWidth,
        height: endBorderHeight)
    leftEndBorder.borderWidth = borderWidth
    leftEndBorder.borderColor = UIColor.lightGrayColor().CGColor

    print(bottom.frame.width)
    let rightEndBorder = CALayer()
    rightEndBorder.frame = CGRect(
        x: self.frame.width - 1,
        y: self.frame.height - endBorderHeight,
        width: borderWidth,
        height: endBorderHeight)

    rightEndBorder.borderWidth = borderWidth
    rightEndBorder.borderColor = UIColor.lightGrayColor().CGColor

    self.layer.addSublayer(leftEndBorder)
    self.layer.addSublayer(bottom)
    self.layer.addSublayer(rightEndBorder)
    self.layer.masksToBounds = true
    }
}

我可以在左侧制作栏,但由于 rightEndBorder 错误的x位置而难以制作右侧?

谁能告诉我我做错了什么?

-----编辑

我尝试将rightEndBorder的x位置设置为200,它给了我以下内容。

enter image description here

但是如果我试图把它设置为300,我就不会再看到它了。

-----编辑

检查整个文本字段是否显示在屏幕上。

enter image description here

-----编辑

我想是改变textField宽度的前导和尾随约束。

enter image description here

-----解决方案

问题是我在textField上有前导和尾随约束,并且这些约束在插入unline后改变了宽度。搜索谷歌后,我认为在应用约束后我必须使用下划线,该约束在函数 viewDidLayoutSubviews()中。

1 个答案:

答案 0 :(得分:1)

从评论部分重新输入作为答案。

问题似乎是视图被切断(因此您将看不到右边框)或右侧边框在设置后向右移动。怀疑这种情况的原因来自你的照片,右边框位于x = 200处,因为它沿着底部边界线已经过了一半,但应该只是沿着该线的40%。

<强>更新

这个问题的正确答案是施加的限制导致文本字段宽度发生变化。