在 Swift 中显示不使用约束的 UITextField 的底部边框。

Show bottom border of UITextField in Swift not working with Constraints.

我的显示底部边框的代码只有在我不使用任何约束的情况下才有效。一旦我这样做,底线就消失了。这个问题有什么原因或解决办法吗?这是我当前的代码。我已经看到了很多解决方案的答案,但是 none 在我添加约束时有效。

 func useUnderline() {

    var bottomLine = CALayer()

    bottomLine.frame = CGRect(x: 0.0, y: self.frame.height - 1, width: self.frame.width, height: 1)
    bottomLine.backgroundColor = UIColor.white.cgColor
    self.borderStyle = UITextBorderStyle.none
    self.layer.addSublayer(bottomLine)

}

Any reasons

当然是有原因的。约束会调整您的视图大小 (self)。但他们不会调整图层大小或重新定位图层。所以底部边框现在在错误的位置,可能在视图之外。您的代码取决于 self.frame,但约束 更改 self.frame.

none are working when I add constraints

好吧,这很简单。您需要在您的视图中实现 layoutSublayersOfLayer,并在那里布置边框层,使其保持在您想要的位置。

我刚刚为 objc C 找到了一个旧的 post。 您只需将您的视图放在 viewDidLayoutSubviews() 中,一切正常。