为啥在我的自定义 UIView 类中没有调用 init(frame: CGRect)?

Posted

技术标签:

【中文标题】为啥在我的自定义 UIView 类中没有调用 init(frame: CGRect)?【英文标题】:Why is init(frame: CGRect) not being called in my custom UIView class?为什么在我的自定义 UIView 类中没有调用 init(frame: CGRect)? 【发布时间】:2018-06-16 02:39:31 【问题描述】:

我有一个名为 GradientViewUIView 子类,我在 UITableViewCell 中使用它

layoutSubviews() 被调用,但我的 init 方法从未被调用。

import UIKit

class GradientView: UIView 

var gradientLayer = CAGradientLayer()

    override init(frame: CGRect) 

        super.init(frame:frame)

        self.backgroundColor = .orange
        gradientLayer.colors = [UIColor.clear.cgColor, UIColor.black.cgColor]
        gradientLayer.locations = [0.6, 1.0]
        gradientLayer.frame = self.bounds
        self.layer.insertSublayer(gradientLayer, at: 0)
    

    override func layoutSubviews() 
        super.layoutSubviews()

        self.gradientLayer.frame = self.bounds
    

    required init?(coder aDecoder: NSCoder) 
        super.init(coder: aDecoder)
    


我错过了什么?

【问题讨论】:

你没有实例化它来创建一个对象。 【参考方案1】:

UITableViewCell 通常不使用init(frame:) 进行初始化,而是使用init(style: UITableViewCellStyle, reuseIdentifier: String?)required init?(coder aDecoder: NSCoder) 进行初始化。

第一个将在您向表格视图注册类时使用,第二个将在从情节提要初始化或向表格视图注册 xib 文件时使用。

【讨论】:

以上是关于为啥在我的自定义 UIView 类中没有调用 init(frame: CGRect)?的主要内容,如果未能解决你的问题,请参考以下文章

如何让我的 UIView 使用我的自定义 CALayer 作为其支持层?

我的自定义 UIView 没有显示在屏幕上

为啥我的 UIButton 没有显示在我的子视图中? iPad 应用程序

为啥我的自定义函数调用方法中的 println 语句没有出现在日志中?

为啥我的 UIView 子视图没有在父视图中呈现? (附代码)

为啥我的自定义按钮的值不能保存在我的数据库中?