实现效果如下:
image.png左边是桌位类型,右边是具体的桌位类型对应的桌号。
其实有两种实现方式,第一种是UICollectionView实现,左边的分组头就设置UICollectionView的header即可,设置header的frame。之前的同事就是这么实现的。现在发现有点问题,因为collectionView的复用导致滑动的时候左边header会消失的问题。
我的实现是左边UITableView+右边CollectionView的实现即可。然后在scrollViewDidScroll方法处理联动的效果。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if ([scrollView isKindOfClass:UICollectionView.class]) {
[self.emptySeatTableView setContentOffset:CGPointMake(5, scrollView.contentOffset.y)];
} else if ([scrollView isKindOfClass:UITableView.class]){
[self.collectionView setContentOffset:CGPointMake(0, scrollView.contentOffset.y)];
}
}
计算左边栏分组的行高:
#pragma mark - 计算对应行高
- (CGFloat)heightOfSection:(NSInteger)section {
if (section == self.modelArray.count) {
// 编辑按钮
return k_Empty_Header_Edit_Height;
}
CGFloat h = 0;
NSInteger numberOfSection = [self.modelArray objectAtIndex:section].tables.count;
NSInteger i = (numberOfSection + self.numberOfColumn ) / self.numberOfColumn;
// h = i * (k_Empty_Cell_Height + k_Empty_Cell_Margin) - k_Empty_Cell_Margin + k_Empty_Section_Top + k_Empty_Section_Bottom + 20;
if(i <= 1){
h = k_Empty_Cell_Height + k_Empty_Cell_Margin;
} else {
h = i * (k_Empty_Cell_Height + k_Empty_Cell_Margin) + k_Empty_Section_Top;
}
return h;
}
- (CGFloat)yOfSection:(NSInteger)section {
if (section == 0) {
return 0;
} else {
return [self heightOfSection:section - 1] + [self yOfSection:section - 1];
}
}
网友评论