84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
如题是这样的我想达到的效果是往下滑的过程中,比如下图
这个是用tableview做的 现在滑到这里它是不会动的 我想达到效果是比如蓝色没到屏幕的一半(大约那个位置也行)的时候自动退回到第一行也就是只有红色那行,如果超过了,如下图
则自动滑到蓝色那行,这个改如何实现比较方便,tableview或者scrollview有直接的属性控制吗 求解答 谢谢
认证高级PHP讲师
你说的是卡片布局吧, 用UICollectionView和自定义UICollectionViewFlowLayout就可以实现, Demo地址
// 修改cell滑动时大小 - (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect { NSArray *attrs = [[NSArray alloc] initWithArray:[super layoutAttributesForElementsInRect:self.collectionView.bounds] copyItems:YES]; CGFloat scale; CGFloat offset; for (UICollectionViewLayoutAttributes *attr in attrs) { // 设置collection在滑动时, cell的大小 if (self.scrollDirection == UICollectionViewScrollDirectionHorizontal) { offset = fabs(attr.center.x - self.collectionView.contentOffset.x - self.collectionView.bounds.size.width * 0.5); scale = 1 - offset / (self.collectionView.bounds.size.width * 0.5) * 0.25; attr.transform = CGAffineTransformMakeScale(scale, scale); } else { offset = fabs(attr.center.y - self.collectionView.contentOffset.y - self.collectionView.bounds.size.height * 0.5); scale = 1 - offset / (self.collectionView.bounds.size.height * 0.5) * 0.25; } attr.transform = CGAffineTransformMakeScale(scale, scale); } return attrs; } // 返回collection滑动手指松开后, collection最终的contentOffset - (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity { if (self.scrollDirection == UICollectionViewScrollDirectionHorizontal) { // cell 宽度 CGFloat itemW = self.itemSize.width; // cell边框距离(未设置collection的contentInset, 默认为0) CGFloat margin = self.collectionView.contentInset.left; // collection在手指松开后,collection滑动到停止时, collectioncontentOffset CGFloat index = roundf((proposedContentOffset.x + margin) / itemW); // 修改collection最终的contentOffset, 使collection滑动到cell中间 proposedContentOffset.x = index * self.collectionView.bounds.size.width - (index + 1) * margin; } else { CGFloat itemH = self.itemSize.height; CGFloat margin = self.collectionView.contentInset.top; CGFloat index = roundf((proposedContentOffset.y + margin) / itemH); proposedContentOffset.y = index * self.collectionView.bounds.size.height - (index+1) * margin; } return proposedContentOffset; }
你说的是卡片布局吧, 用UICollectionView和自定义UICollectionViewFlowLayout就可以实现, Demo地址