伙计我需要你的帮助......我通过UICollectionView创建了一个自定义控件段。
CustomView.m
我有5个包含标签的单元格,标签包含单元格的标题 为了通过UILabel的宽度获取单元格宽度,我以这种方式实现了sizeForItemAtIndexPath方法:
-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
CGSize size = [[[self titleSection] objectAtIndex:indexPath.item] sizeWithAttributes:nil];
return CGSizeMake(size.width +35 , self.frame.size.height);
}
我还创建了一个UIView,它具有指示选择了哪个单元格的光标功能。 为光标设置动画(UIView)我用这种方式实现:
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
NSIndexPath *newIndexPath = [NSIndexPath indexPathForItem:indexPath.item inSection:0];
[collectionView scrollToItemAtIndexPath:newIndexPath atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:YES];
UDPassData *data = [UDPassData sharedInstance];
[data.sectionContentCollection scrollToItemAtIndexPath:newIndexPath atScrollPosition:UICollectionViewScrollPositionNone animated:YES];
if (indexPath == newIndexPath) {
[collectionView scrollToItemAtIndexPath:indexPath atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:YES];
}
UICollectionViewLayoutAttributes *attributes = [collectionView layoutAttributesForItemAtIndexPath:newIndexPath];
CGRect cellFrameInSuperview = [collectionView convertRect:attributes.frame toView:collectionView];
data.index = cellFrameInSuperview;
[UIView animateWithDuration:.4 delay:0 usingSpringWithDamping:1 initialSpringVelocity:1 options:UIViewAnimationOptionCurveEaseInOut animations:^{
_horizontalBar.frame = CGRectMake(cellFrameInSuperview.origin.x, _horizontalBar.frame.origin.y, cellFrameInSuperview.size.width , 3);
} completion:nil];
}
UICollectionViewController.m
现在在另一个ViewController中,我有另一个带水平滚动的UICollectionView,它与段控件共享索引路径,这样即使使用自定义段控件也可以控制collectionView的滚动。到这里一切正常,我设法得到了一切,但我只是有问题..
当uicollection视图滚动时,段控制滑块不移动...简而言之,如果collectionView位于单元格2中,则自定义段控件光标应移动到我创建的段控件中的第二个单元格。我希望能够解释
编辑:我想从Youtube应用程序中看到的是这个。顶级菜单......
我正在用2个collectionView做这个。
第一个collectionView是菜单(内置于UIView自定义类中)
第二个collectionView在页面之间浏览,位于外部UIViewController
中答案 0 :(得分:1)
确保reload
collectionView数据源以便重新开始。
[self.collection1 performBatchUpdates:^{
[collectionView reloadData]
} completion:nil];