2016-11-10 53 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文件中,這幾乎總是錯誤的。您應該習慣於將所有與大小有關的代碼放入UIViewControllers的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 
} 
相關問題