为啥在我的自定义 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 【问题描述】:我有一个名为 GradientView
的 UIView
子类,我在 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 作为其支持层?
为啥我的 UIButton 没有显示在我的子视图中? iPad 应用程序
为啥我的自定义函数调用方法中的 println 语句没有出现在日志中?