簡體   English   中英

為什么這些按鈕在大屏幕設備中無法正確顯示? (迅速)

[英]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

}


}

這是我認為是自動布局設置的屏幕截圖:

在此處輸入圖片說明

viewDidLoadautoLayout尚未生效,因此按鈕bounds不是特定於設備的。

viewDidLayoutSubviewsviewDidAppear orangeGradient.frame = self.joinCommunityButton.bounds

如果使用autoLayout請確保在調用viewDidLayoutSubviews 之后添加漸變或執行與UIView框架或邊界有關的任務。

也,

不要將CAGradientLayer()的初始化放置在viewDidAppearviewDidLayoutSubviews函數中,因為它們會被多次調用,並會不斷向UIView添加圖層,您只需要更改兩個方法中的界限即可。

請確保您在界面構建器中使用了AutoLayout。如果要使用,請確保它們也留有空白。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM