Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 不带故事板的Swift UITableViewCell don';不要使用自动布局_Ios_Swift_Uitableview_Autolayout - Fatal编程技术网

Ios 不带故事板的Swift UITableViewCell don';不要使用自动布局

Ios 不带故事板的Swift UITableViewCell don';不要使用自动布局,ios,swift,uitableview,autolayout,Ios,Swift,Uitableview,Autolayout,我正在尝试使用定义UITableViewCell的类编写一个不带故事板的UITableViewController。 我根据需要使用配置了表视图 tableView.rowHeight = UITableViewAutomaticDimension tableView.estimatedRowHeight = 200.0 tableView.register(HomeCell.self, forCellReuseIdentifier: "cell") 并创建了一个只有图标的HomeCell

我正在尝试使用定义UITableViewCell的类编写一个不带故事板的UITableViewController。
我根据需要使用配置了表视图

tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 200.0  
tableView.register(HomeCell.self, forCellReuseIdentifier: "cell")
并创建了一个只有图标的
HomeCell
UITableViewCell类

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)

    icon = UIImageView(frame: CGRect.zero);
    icon.translatesAutoresizingMaskIntoConstraints = false;
    contentView.addSubview(icon)
}
我在类中插入了用于自动布局的func,并通过调试控制该函数的调用:

override func layoutSubviews() {
    icon.heightAnchor.constraint(equalToConstant: 50).isActive = true
    icon.widthAnchor.constraint(equalToConstant: 50).isActive = true
    icon.leftAnchor.constraint(equalTo: contentView.leftAnchor,
                               constant: 5).isActive = true
    icon.topAnchor.constraint(equalTo: contentView.topAnchor,
                              constant: 5).isActive = true
    contentView.bottomAnchor.constraint(equalTo: icon.bottomAnchor, constant: 5).isActive = true
} 
结果是图标位于正确的位置,但
contentView
的高度错误,即UITableViewAutomaticDimension设置的原始尺寸44,并且连续行重叠。

有人知道怎么回事吗?

您应该激活约束a

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)

    icon = UIImageView(frame: CGRect.zero);
    icon.translatesAutoresizingMaskIntoConstraints = false;
    contentView.addSubview(icon)
    setContr()
} 
func setContr() {

    icon.heightAnchor.constraint(equalToConstant: 50).isActive = true
    icon.widthAnchor.constraint(equalToConstant: 50).isActive = true
    icon.leftAnchor.constraint(equalTo: contentView.leftAnchor, constant: 5).isActive = true
    icon.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 5).isActive = true
    contentView.bottomAnchor.constraint(equalTo: icon.bottomAnchor, constant: 5).isActive = true
}

缺少底部锚点
isActive
吗?LayoutSubview会被多次调用,您的代码会多次有效地添加相同的约束集,这是无论如何都不需要的,因此请将所有约束添加代码移动到InitView,是一个坏拷贝,但结果是内容视图的高度相同,图标被压缩。这是正确的解决方案。我使用
setNeedsLayout
激活控制器中的约束,但如果创建了单元,则高度保持不变。通过这种方式,将创建具有正确高度的单元。非常感谢