如图所示效果图
核心代码
- (void)updateBannerSizeWithOffset:(CGFloat)offsetY
{
/*
30 是 从图片开始变小时候的偏移量a 到和顶部视图变得同样大小的时候偏移量b 的差 ,
是一个合适的值,没有特定意义.
即 从图片开始变小到图片和顶部视图相同大小的时候,滚动了30 像素
40 是 图片开始变小的时候tableView的偏移量
注意,70是 图片和顶部视图相等大小的时候, tableView的偏移量
*/
///每滚动一个像素宽度的变化量
/*
202 是大图的宽度 127 是顶部导航栏的图片的宽度
*/
CGFloat widthOffsetOfEveryOffset = ((202 * rectScale() - 127 * rectScale()))/30 * rectScale();
///offsetY 偏移量对应减小的宽度
CGFloat widthOff = (offsetY - 40 * rectScale()) * widthOffsetOfEveryOffset;
CGFloat width = 222 * rectScale() - widthOff;
width = MIN(222 * rectScale(), width);
[self.imgView mas_updateConstraints:^(MASConstraintMaker *make) {
make.width.mas_equalTo(width);
make.height.mas_equalTo(width * 89 / 202);
}];
}