上述解决方案实际上并不能真正提供它在 Tweetbot 或 Tinder [目标的个人资料图片缩放] 中的确切实现方式。
我还必须解决这个问题,我发现最完美的实现是使用 2 个主要元素:
1)具有内容插图的表格视图
2)该表视图顶部的图像视图,该视图具有顶部约束和高度约束的出口,并且位于表视图内容插图提供的空白空间的顶部。
所以首先要确保为 tableView 设置插图和为 imageView 设置初始高度约束。例如,您可以在 viewDidLoad 中执行此操作。
imageViewHeightConstraint.constant = view.frame.height * 0.3
tableView.contentInset = UIEdgeInsets(top: view.frame.height * 0.3, left: 0, bottom: 0, right: 0)
然后只需听 w scrollViewDidScroll 委托方法并相应地修改约束。
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let contentOffset = scrollView.contentOffset.y
if -contentOffset >= view.frame.height * 0.3 {
//reset the top constraint
topConstraint.constant = 0
//make the imageview bigger by the additional content offset value
imageViewHeightConstraint.constant = -contentOffset
} else {
topConstraint.constant = -(view.frame.height * 0.3 + contentOffset)
}
}
您可能需要根据自己设置约束的方式反转符号。也许有一种方法可以优化而不是经常修改约束,但你明白了。
另请注意,您需要:
imageView.contentMode = .scaleAspectFill
layer.masksToBounds = true
否则,图像将被绘制在您的第一个 tableView 单元格之上[取决于它可能覆盖整个表格视图的图像大小],因为它是在其“边界”之外绘制的。