我想在viewController的scrollViewDidScroll方法中更新tableView单元格的favoritesImageView的顶部约束常量的约束。
下面是我的自定义tableViewCell中的func
private func setupFavoritesImageView() {
addSubview(favoritesImageView)
favoritesImageView.translatesAutoresizingMaskIntoConstraints = false
imageTopConstraint = favoritesImageView.topAnchor.constraint(equalTo:cellContentView.topAnchor)
addConstraint(imageTopConstraint)
imageHeightConstraint = favoritesImageView.heightAnchor.constraint(equalTo: cellContentView.heightAnchor)
addConstraint(imageHeightConstraint)
[favoritesImageView.centerXAnchor.constraint(equalTo: cellContentView.centerXAnchor),
favoritesImageView.widthAnchor.constraint(equalTo: cellContentView.widthAnchor)]
.forEach{$0.isActive = true}
}
但是,当我在scrollViewDidScroll中设置常量时,它检测到我的约束在控制台中发生了变化,但它看起来与使用相同的公式但使用@IBOutlet约束完全不同。
的ViewController
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let tableView = favoritesView.tableView
let offSetY = tableView.contentOffset.y
for cell in tableView.visibleCells as! [FavoriteImagesTableViewCell] {
cell.imageTopConstraint.constant = parallaxOffset(newOffsetY: offSetY, cell: cell)
cell.setNeedsLayout()
}
}
我试图制作一个视差表View并以编程方式更新约束的常量。我发现在@IBOutlet上使用的相同代码工作正常。我在代码中实现它时遇到了麻烦。
*编辑 - 激活所有约束
图片链接\ /
gray is cell, black is imageView background color
感谢任何帮助,谢谢。
答案 0 :(得分:0)
从单元格的 layoutSubviews 创建imageView的代码可能只是一次思考调用,因为每次更改 scrollViewDidScroll中的顶部约束时都会再次调用该方法,所以限制再次被添加,所以冲突发生,你看到了奇怪的结果
像这样这是一个以编程方式约束的演示