2016-08-31 5 views
1

私はいくつか色付きの背景を持つUILabelsを持っており、私はCAGradientLayersを以下のように追加しました。 iPhone 4とiPhone 5SでiPhone 6のCAGradientLayerを間違って表示

CAGradientLayer * gradientLayer = [CAGradientLayer layer]; 
gradientLayer.colors = [NSArray arrayWithObjects: 
         (id) [UIColor colorWithWhite:1 alpha:0.3].CGColor, 
         (id) [UIColor colorWithWhite:0.5 alpha:0.3].CGColor, nil]; 
gradientLayer.frame = label.bounds; 
gradientLayer.cornerRadius = label.layer.cornerRadius; 
[label.layer insertSublayer:gradientLayer atIndex:0]; 

それは完璧に見えるが、iPhone 6SにCAGradientLayersは、次のスクリーンショットのように水平に置き忘れています。

enter image description here

この問題は、同様にUIButtonsために起こります。

私はiOS 9.3を実行しています。

+0

ここで、コントローラのライフサイクルは、そのコードが配置されているか表示されていますか? – beyowulf

+1

ラベルの「ボタン」フレームが変化した場合、グラデーションレイヤーを変更する必要があります。たとえば、ラベルが自動レイアウトでレイアウトされていて、ビューが回転している場合は、グラデーションのフレームを更新する必要があります。ビューコントローラの 'viewDidLayoutSubviews'でこれを行うことができます。あるいは、ラベル/ボタンのグラデーションをサブクラス化し、' layoutSubviews'でグラディエントフレームを更新することができます。 – keithbhunter

+0

@beyowulfコードはviewDidLoadメソッドにあります。 –

答えて

1

あなたが必要とするのは自動レイアウト制約です。この迅速なコードは、viewDidLayoutSubviewsメソッドで何をする必要があるかを表しています。

class ViewController: UIViewController { 

    @IBOutlet weak var button: UIButton! 
    let gradientLayer = CAGradientLayer() 

    override func viewDidLoad() { 
     super.viewDidLoad() 


     gradientLayer.colors = [UIColor(white: 1, alpha: 0.3).CGColor, 
           UIColor(white: 0.5, alpha: 0.3).CGColor] 
     gradientLayer.frame = button.bounds 
     gradientLayer.cornerRadius = button.layer.cornerRadius 
     button.layer.insertSublayer(gradientLayer, atIndex: 0) 
    } 

    override func viewDidLayoutSubviews() { 
     super.viewDidLayoutSubviews() 

     gradientLayer.frame = button.bounds 
    } 

} 
+0

ボタンにgradientLayerを追加する必要はありませんか? –

+0

申し訳ありませんが、私は私の答えを編集しました – Klevison

関連する問題