[英]Why are these buttons not displaying correctly in larger screen devices? (Swift)
我已經使用iPhone SE視圖在Xcode中布置了我的應用程序。 這些按鈕等均在測試狀態下出現。
但是,當我在大屏幕上(即iPhone 7)進行測試時,會發生一些奇怪的事情。
1)即使我將約束設置為距邊距20像素,按鈕也會擁抱右側
其次,在這種情況下,我應用於按鈕的漸變似乎在按鈕上停止了3/4:
在每個按鈕實例中調用的都是相同的代碼:
let orangeGradient = CAGradientLayer().orangeButtonColor()
orangeGradient.frame = self.joinCommunityButton.bounds
self.joinCommunityButton.layer.insertSublayer(orangeGradient, at: 0)
extension CAGradientLayer {
func bespokeColor() -> CAGradientLayer {
let topColor = UIColor(red: (46/255.0), green: (63/255.0),blue: (81/255.0), alpha: 1)
let bottomColor = UIColor(red: (22/255.0), green: (31/255.0),blue: (41/255.0), alpha: 1)
let gradientColors: [CGColor] = [topColor.cgColor, bottomColor.cgColor]
let gradientLocations: [Float] = [0.0, 1.0]
let gradientLayer: CAGradientLayer = CAGradientLayer()
gradientLayer.colors = gradientColors
gradientLayer.locations = gradientLocations as [NSNumber]?
return gradientLayer
}
func orangeButtonColor() -> CAGradientLayer {
let topColor = UIColor(red: (211/255.0), green: (115/255.0),blue: (28/255.0), alpha: 1)
let bottomColor = UIColor(red: (171/255.0), green: (80/255.0),blue: (14/255.0), alpha: 1)
let gradientColors: [CGColor] = [topColor.cgColor, bottomColor.cgColor]
let gradientLocations: [Float] = [0.0, 1.0]
let gradientLayer: CAGradientLayer = CAGradientLayer()
gradientLayer.colors = gradientColors
gradientLayer.locations = gradientLocations as [NSNumber]?
return gradientLayer
}
func purpleButtonColor() -> CAGradientLayer {
let topColor = UIColor(red: (112/255.0), green: (41/255.0),blue: (183/255.0), alpha: 1)
let bottomColor = UIColor(red: (85/255.0), green: (19/255.0),blue: (159/255.0), alpha: 1)
let gradientColors: [CGColor] = [topColor.cgColor, bottomColor.cgColor]
let gradientLocations: [Float] = [0.0, 1.0]
let gradientLayer: CAGradientLayer = CAGradientLayer()
gradientLayer.colors = gradientColors
gradientLayer.locations = gradientLocations as [NSNumber]?
return gradientLayer
}
func greenButtonColor() -> CAGradientLayer {
let topColor = UIColor(red: (35/255.0), green: (193/255.0),blue: (67/255.0), alpha: 1)
let bottomColor = UIColor(red: (31/255.0), green: (148/255.0),blue: (53/255.0), alpha: 1)
let gradientColors: [CGColor] = [topColor.cgColor, bottomColor.cgColor]
let gradientLocations: [Float] = [0.0, 1.0]
let gradientLayer: CAGradientLayer = CAGradientLayer()
gradientLayer.colors = gradientColors
gradientLayer.locations = gradientLocations as [NSNumber]?
return gradientLayer
}
}
這是我認為是自動布局設置的屏幕截圖:
在viewDidLoad
, autoLayout
尚未生效,因此按鈕bounds
不是特定於設備的。
放
viewDidLayoutSubviews
或viewDidAppear
orangeGradient.frame = self.joinCommunityButton.bounds
如果使用autoLayout
請確保在調用viewDidLayoutSubviews
之后添加漸變或執行與UIView
框架或邊界有關的任務。
也,
不要將CAGradientLayer()
的初始化放置在viewDidAppear
或viewDidLayoutSubviews
函數中,因為它們會被多次調用,並會不斷向UIView
添加圖層,您只需要更改兩個方法中的界限即可。
請確保您在界面構建器中使用了AutoLayout。如果要使用,請確保它們也留有空白。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.