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
    }
}
Другие вопросы по тегам