为什么这些按钮在大屏幕设备中无法正确显示?(迅速)

RDo*_*wns 1 iphone ios swift

我已经使用iPhone SE视图在Xcode中布置了我的应用程序.按钮等都在测试它们应该如何.

然而,当我在大屏幕上进行测试时,即iPhone 7会发生一些奇怪的事情.

1)按钮拥抱右侧,即使我将约束设置为距离边距为20px

在此输入图像描述 在此输入图像描述

其次,我应用于我的按钮的渐变似乎在这个实例中停止了按钮的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

}


}
Run Code Online (Sandbox Code Playgroud)

以下是我认为的自动布局设置的屏幕截图:

在此输入图像描述

Rik*_*ikh 7

In viewDidLoad,autoLayout尚未生效,因此您的按钮bounds不是特定于设备的.

orangeGradient.frame = self.joinCommunityButton.boundsviewDidLayoutSubviewsviewDidAppear

如果您正在使用,请确保在调用之后添加渐变或执行与UIView帧或边界相关的任务. viewDidLayoutSubviewsautoLayout

也,

不要多次调用CAGradientLayer()内部viewDidAppearviewDidLayoutSubviews函数的初始化,并且不断添加图层UIView,你应该只更改两个方法中的边界.