热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

为什么UITableViewCell中的渐变层不能覆盖整个框架?

如何解决《为什么UITableViewCell中的渐变层不能覆盖整个框架?》经验,为你挑选了1个好方法。

我尝试使用长UIView制作一个标准的渐变上下。但是还不满。这笔尖的UITableViewCell的一部分,所以我没有获得viewDidLayoutSubviews()在这个线程。

我试图contentView.layoutIfNeeded()从此视图的代码版本中调用。我在调用UITableView cellForRowAtIndexPath时调用了它。但这没有效果。

我准备中的渐变awakeFromNib()

let colors = [
            UIColor(red: 33/255.0, green: 33/255.0, blue: 33/255.0, alpha: 1.0).cgColor,
            UIColor(red: 51/255.0, green: 51/255.0, blue: 51/255.0, alpha: 1.0).cgColor]
let gradient = CAGradientLayer()
gradient.frame = gradientView.bounds
gradient.colors = colors
gradientView.layer.insertSublayer(gradient, at: 0) 

我的代码有问题吗?



1> clemens..:

您应该使用view的bounds而不是frame,因为您的图层在视图的内部,并且框架可能有偏移。

的视图布局在之后更改awakeFromNib。因此,您应该调整layoutSubviews视图中图层的大小。为此,创建一个属性gradient并:

let gradient: CAGradientLayer = CAGradientLayer()

override func awakeFromNib() {
    ...
    let colors = [
                UIColor(red: 33/255.0, green: 33/255.0, blue: 33/255.0, alpha: 1.0).cgColor,
                UIColor(red: 51/255.0, green: 51/255.0, blue: 51/255.0, alpha: 1.0).cgColor]
    gradient.frame = bounds
    gradient.colors = colors
    gradientView.layer.insertSublayer(gradient, at: 0) 
    ...
}

override func layoutSubviews() {
    super.layoutSubviews()
    gradient.frame = bounds
}

编辑:替代方法是具有自己的图层类的自定义视图:

public class GradientLayer: UIView {
    @IBInspectable var startColor: UIColor! = UIColor(red: 33/255.0, green: 33/255.0, blue: 33/255.0, alpha: 1.0)
    @IBInspectable var endColor: UIColor! = UIColor(red: 51/255.0, green: 51/255.0, blue: 51/255.0, alpha: 1.0)

    override class var layerClass : AnyClass {
        return CAGradientLayer.self
    }
    override func awakeFromNib() {
        super.awakeFromNib()
        let colors = [ startColor.cgColor, endColor.cgColor ]
        if let gradient = self.layer as? CAGradientLayer {
            gradient.colors = colors
        }
    }
}

这更加优雅,因为您可以用IB inspectables替换静态颜色,并且具有可重用的组件视图。


推荐阅读
author-avatar
1074017584_789ded
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有