2015-10-11 7 views
0

У меня есть пользовательский UITextField, который добавляет подуровень к UITextField для цветового градиента. По моему мнению, у контроллера есть текстовые поля, которые предназначены для полной ширины экрана.swift - UITextField self.bounds несогласованность при выборе классов размера

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 
    } 
} 
+0

Спасибо за решение и объяснение – Shane

+0

Эй, Можете ли вы, пожалуйста, помочь мне. У меня есть такой же пользовательский класс для UITextField. Указатель отладки остается в одном месте. На layoutSubviews(). Я использую быстрые 3 и Xcode 8. Я хочу установить шрифт в Custon UITextField Class Цените свои возможности. – Charmi