【问题标题】:iOS8: Auto-layout and GradientiOS8:自动布局和渐变
【发布时间】:2015-07-01 21:38:27
【问题描述】:

设置:

我有一个View Controller,它由一个View 和一个Container View 组成。

View(橙色)是pinnedtop 0、left 0 和right 0。

Container View(灰色)是pinnedbottom 0、left 0 和right 0。

ViewBottom Space to: Container View = 0

ViewProportional Height to Container 查看 = 1

期望的结果: 我想为View(橙色)的背景添加渐变

试过了:

我正在使用具有班级大小的自动布局来在不同的屏幕上获得不同的行为。

代码:

class ViewController: UIViewController {

    @IBOutlet weak var graphView: UIView!
    @IBOutlet weak var containerView: UIView!
    override func viewDidLoad() {
        super.viewDidLoad()

        let backgroundColor = CAGradientLayer().graphViewBackgroundColor()
        backgroundColor.frame = self.graphView.frame

        self.graphView.layer.addSublayer(backgroundColor)
}

我有一个类别:

extension CAGradientLayer {

    func graphViewBackgroundColor() -> CAGradientLayer {

        let topColor = UIColor(red: (160/255.0), green: (160/255.0), blue: (160/255.0), alpha: 1)
        let bottomColor = UIColor(red: (52/255.0), green: (53/255.0), blue: (52/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

        return gradientLayer
    }
}

结果:

如您所见,渐变并未覆盖整个View

问题:如何让渐变覆盖整个View

更新:

当我将代码放在viewDidLayoutSubviews() 时,旋转时看起来很奇怪:

【问题讨论】:

    标签: swift ios8 autolayout gradient


    【解决方案1】:

    只需在 viewDidLayoutSubviews 中执行此操作:

    override func viewDidLayoutSubview() {
      super.viewDidLayoutSubviews
      backgroundColor.frame = self.graphView.bounds
    }
    

    viewDidLayoutSubviews 应该在您旋转设备时调用。

    如果它没有被调用,覆盖这个方法并按照,

    override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
      super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
    
      backgroundColor.frame = self.graphView.bounds
    }
    

    【讨论】:

    • 请看变化
    • 谢谢。那行得通。此外,当我在 Storyboard 中剪辑子视图时,这也有效。你想把它作为你的答案的一部分吗?
    • @user1107173 很高兴能帮到你。
    • @GeneratorOfOne 这非常简单、干净而且很有帮助。我看到的其他东西对于 Swift/iOS 新手来说是有教育意义的,但要复杂得多。谢谢。
    【解决方案2】:

    尝试将渐变代码放入viewDidLayoutSubviews 而不是viewDidLoad

    viewDidLoad 被调用时,视图没有被布置(即还没有设置它们的最终帧),所以这就是为什么你只能看到渐变的部分覆盖

    【讨论】:

    • 对此也表示感谢,因为它促使选择的答案得到改进。
    猜你喜欢
    • 2014-11-23
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多