swift - UITextField self.bounds несоответствие, когда классы размера не выбраны
У меня есть пользовательский UITextField, который добавляет подслой к UITextField для цветового градиента. В моем контроллере просмотра у меня есть текстовые поля, которые должны занимать всю ширину экрана.
import UIKit
import Foundation
class CustomTextField: UITextField {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
let gradientLayer = CAGradientLayer()
gradientLayer.frame = self.bounds
/* gradient color and location code */
self.layer.insertSublayer(gradientLayer, atIndex: 0)
}
}
Я также отключил классы размера.
Моя проблема в том, что при работе на симуляторе больше 3,5"градиент не проходит прямо по текстовому полю. Похоже, ошибка заключается в том, что self.bounds не оценивает большую ширину.
Любое предложение, которое не требует включения классов размера?
1 ответ
Решение
Вид границ рассчитывается во время UIView.layoutSubviews()
, Вам необходимо переопределить этот метод:
import UIKit
class CustomTextField: UITextField {
private let gradientLayer = CAGradientLayer()
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
layer.insertSublayer(gradientLayer, atIndex: 0)
}
override func layoutSubviews() {
super.layoutSubviews()
gradientLayer.frame = bounds
}
}