我想在子类UITableViewCell中使用init(frame: CGRect)
。
override init(frame: CGRect) {
super.init(frame: CGRect)
}
但这引发了一个错误:Initializer does not ovrride a designated initializer from its super class
,我做错了什么?
答案 0 :(得分:7)
对于UITableViewCell
,你应该重写这个:
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
}
请参阅documentation。
如果您希望能够改变细胞'框架,您应该查看委托方法,如:
tableView(_:heightForRowAtIndexPath:)
行高tableView(_:indentationLevelForRowAtIndexPath:)
for row indent UITableViewDelegate
见documentation。
答案 1 :(得分:0)
init(frame: CGRect)
不是超类UITableViewCell的初始值设定项。您需要覆盖init(coder: aDecoder)
或init(style: UITableViewCellStyle, reuseIdentifier: String?)
答案 2 :(得分:0)
是的,UITableViewCell只有两个初始值设定项
public init(style: UITableViewCellStyle, reuseIdentifier: String?)
public init?(coder aDecoder: NSCoder)
答案 3 :(得分:0)
如果您确实想使用init(frame: CGRect)
,请使用UICollectionViewCell
。并使用CGSize(width: view.frame.width, height: 100)
设置单元格的大小。例如,
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: view.frame.width, height: 100)
}
它看起来像tableViewCell,您也可以使用init(frame: CGRect)
。
答案 4 :(得分:0)
情况1: 如果您需要直接更改单元格的高度,可以使用
func tableView(_ tableView: UITableView, heightForRowAt indexPath:IndexPath) -> CGFloat {
return 50
}
情况2: 如果您需要对某个单元进行子类化,请转到该单元类并覆盖重用标识符
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
let hrt = heightAnchor.constraint(equalToConstant: 50)
hrt.isActive = true
}