2017-01-13 22 views
1

Так что я подаю градиент к UIButton через расширение:UIButton с добавлением градиента отрезает

extension UIButton { 

    func addGradient(withColors colors:[CGColor]) { 
     let layer_: CAGradientLayer = CAGradientLayer() 
     layer_.frame = self.bounds 
     layer_.colors = colors 
     layer_.shouldRasterize = true 
     layer_.rasterizationScale = UIScreen.main.scale 
     self.layer.insertSublayer(layer_, at: 0) 
    } 

} 

Применяя его к UIButton через:

@IBOutlet weak var startButton: UIButton! { 
    didSet { 
     startButton.backgroundColor = ECConstants.GenericColors.buttonOrange 
     startButton.setTitleColor(UIColor.white, for: .normal) 
     startButton.addGradient(withColors: [UIColor.white.withAlphaComponent(0.3).cgColor, UIColor.clear.cgColor]) 
    } 
} 

К сожалению, на IPad Pro 12.9 дюймовый (iOS 10.1), он, похоже, не имеет ширины кнопки. Я также попытался применить его в viewDidLoad, но безрезультатно.

iPad Pro UIButton Gradient not full width

Так что мой вопрос, как я делаю градиент пройти весь путь через? Или где самое лучшее место для установки градиента?

+0

Попробуйте ввести ширину кнопки в консоли во время крана. Это может подтвердить, что кнопка такая же широкая, как вы ожидаете (похоже, проблема). – d00dle

ответ

2

Расширение для добавления градиента к кнопке является правильным, то, что вам нужно исправить, - это установить градиент.

Move

startButton.backgroundColor = ECConstants.GenericColors.buttonOrange 
startButton.setTitleColor(UIColor.white, for: .normal) 
startButton.addGradient(withColors: [UIColor.white.withAlphaComponent(0.3).cgColor, UIColor.clear.cgColor]) 

к viewDidAppear или viewDidLayoutSubviews

Причина этого в том, что когда-то viewDidAppear() называется, все размеры По мнению рассчитываются.

Для продуманной шероховатости: (Поддержка вращение устройства)

Убедитесь, что вы пересчитывать размер подслоя в viewDidLayoutSubviews(). Ваша кнопка изменит размер на вращение устройства, поэтому вам также необходимо вручную изменить размер подуровня.

+1

Я закончил перемещение вызова 'startButton.addGradient' из' didSet' в 'viewDidLayoutSubviews' и, похоже, работает. – hamitron