swift - 未选择大小 类 时 UITextField self.bounds 不一致

swift - UITextField self.bounds inconsistency when no size classes selected

我有一个自定义 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 没有评估更大的宽度。

任何不需要启用尺寸 类 的建议?

视图边界是在 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
    }
}