Показать нижнюю границу UITextField в Swift, не работающую с ограничениями.

#ios #swift #uitextfield #constraints #ios-autolayout

#iOS #swift #uitextfield #ограничения #ios-автозапуск

Вопрос:

Мой код для отображения нижней границы работает только в том случае, если я не использую никаких ограничений. Как только я это сделаю, нижняя строка исчезнет. Какие-либо причины или решение этой проблемы? Вот мой текущий код. Я видел довольно много ответов на решение, но ни один из них не работает, когда я добавляю ограничения.

  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)

}
  

Ответ №1:

Какие-либо причины

Конечно, есть причина. Ограничения изменяют размер вашего представления ( self ). Но они не изменяют размер или не перемещают слой. Таким образом, нижняя граница теперь находится не в том месте, возможно, за пределами представления. Ваш код зависит от self.frame , но ограничения меняются self.frame .

при добавлении ограничений ничего не работает

Ну, это довольно просто. Вам нужно реализовать layoutSublayersOfLayer в своем представлении и разместить там пограничный слой, чтобы он оставался там, где вы хотите.

Ответ №2:

Я только что нашел старый пост для objc C. Вы просто помещаете свои представления в viewDidLayoutSubviews(), и все работает просто отлично.