Swift 文本字段边框宽度不正确

Swift text field border isn't the right width

我在按照答案 here 后生成了一个底部边框。

除了边框宽度不正确外,这绝对有效。它设置了约束以匹配其下方按钮的宽度,但正如您所看到的,即将变短。

我错过了什么?

代码:

extension UITextField
{
    func setBottomBorder(withColor color: UIColor)
    {
        self.borderStyle = UITextBorderStyle.none
        self.backgroundColor = UIColor.clear
        let width: CGFloat = 3.0

        let borderLine = UIView(frame: CGRect(x: 0, y: self.frame.height - width, width: self.frame.width, height: width))
        borderLine.backgroundColor = color
        self.addSubview(borderLine)
    }
}

然后在 VC 中:

override func viewDidLoad() {

        authorNameOutlet.setBottomBorder(withColor: UIColor.lightGray)
    }

然后 Xcode 显示...

但是模拟器显示...

我试过将文本字段的宽度设置为 0.7 x 超级视图宽度(与其下方的按钮相同)并将文本字段的宽度设置为与按钮宽度相等但是都不起作用。

这是因为自动布局。

您可以将 autoresizingMask 添加到您的行中。

borderLine.autoresizingMask = [.flexibleWidth, .flexibleTopMargin]

您正在使用边框线视图的静态框架。在 viewDidLoad 之后,您的视图控制器的视图会调整大小。

选项 1:(又快又脏)

将您的代码从 viewDidLoad() 移至 viewWillAppear(_ animated: Bool)viewWillAppear 在视图控制器视图的第一个布局之后被调用

选项 2:

为您的边界线视图添加约束。这样您的边框线视图将自动调整大小。

重要提示:

不要忘记覆盖中的超级调用,否则你会遇到奇怪的错误!

例如:

override func viewDidLoad() {
    super.viewDidLoad()
    // your code
}