2016-11-10 10 views
2

私のswiftアプリで私は私の眺めにグラデーションを適用しています。私は、次のコードでそれを行う:私のストーリーボードで私のビューは、iphone 5とiphone 6で違って見えますが、制約がありますが、ここで何が間違っていますか?

@IBOutlet weak var gradientView: UIView! 

override func viewDidLoad(){ 
    super.viewDidLoad() 

    let layer = CAGradientLayer() 
    layer.frame = CGRect(x: 0, y: 0, width: self.gradientView.frame.width, height: self.gradientView.frame.height) 
    layer.colors = [UIColor.clear.cgColor, UIColor.white.cgColor] 
    gradientView.layer.addSublayer(layer) 
} 

gradientViewここで黒のいずれかになります。

enter image description here

その制約は以下のとおりです。

それそう

enter image description here

各辺のエッジ、上部および下部の白いパネルに触れます。

私は私が持っているiPhone5のシミュレータでそれを実行します。

enter image description here

、それは大丈夫です。私はiphoneの6S上でそれを実行したときしかし、私は以下を参照してください。制約が適用されているので

enter image description here

は、ここでの問題は何ですか?

+0

の境界を持つフレームを交換http://www.andrewgertig.com/2013/08/ios-bounds-vs-frame – Suhaib

+0

gradientView.bounds.width – Suhaib

+2

のviewDidLoadがすべて呼び出されたときのサイズですそれがNIBファイルにあることはほとんど間違っています。すべてのサイズに依存するコードをUIViewControllerのviewDidLayoutSubviewsとUIViewsのlayoutSubviewsに入れなければなりません。そうしないと、ユーザーが画面サイズを回転またはiPadの分割画面を使用して変更した場合にもこの問題が発生します。 –

答えて

1

gradientViewのフレームはまだ更新されていません。viewDidLoadです。代わりにこれを試してみてください:

let gradientLayer = CAGradientLayer() 

override func viewDidLoad(){ 
    super.viewDidLoad() 
    gradientLayer.colors = [UIColor.clear.cgColor, UIColor.white.cgColor] 
    gradientView.layer.addSublayer(gradientLayer) 
} 

override func viewDidLayoutSubviews(){ 
    super.viewDidLayoutSubviews() 
    gradientLayer.frame = gradientView.bounds 
} 
関連する問題