防止跳转UICollectionViewCells

时间:2017-12-11 16:11:05

标签: ios swift uicollectionview uicollectionviewcell

我有if(requestType == RequestTypeGetAllApptDetails) { if(pageIndex == 0) { pastBookings = [[NSMutableArray alloc]init]; onGoingBookings = response[@"ongoing_appts"]; NSLog(@"CHECKINGFAST%@",onGoingBookings); } [pastBookings addObjectsFromArray:response[@"past_appts"]]; self.tableView.backgroundView = self.messageView; [self.tableView reloadData]; } else if(requestType == RequestTypeGetReportMaterialStatus) { // NSArray *custStatusTempArray = response; customerStatusArray = response; customerstatusDict = response[@"customerstatus"]; NSLog(@"CUSTOMERSTATUSARRAY %@", customerStatusArray); NSLog(@"CUSTOMERSTATUSDICT %@", customerstatusDict); if(customerStatusArray == nil || [customerStatusArray count]==0) { NSLog(@"NO MATERIAL ACCEPTED"); } else { custStatusFilteredArray = [NSMutableArray array]; if([customerstatusDict isKindOfClass:[NSDictionary class]]) { NSDictionary *dict = (NSDictionary *)customerstatusDict; [dict enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) { [custStatusFilteredArray addObject:obj]; NSLog(@"FILTEREDARRAY%@",custStatusFilteredArray); }]; } materialStatusStringArray = [custStatusFilteredArray copy]; NSLog(@"materialStatusStringarray%@",materialStatusStringArray); //sorting the materialstatus string array NSSortDescriptor* sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"bookingid" ascending:NO]; sortedMSArray = [materialStatusStringArray sortedArrayUsingDescriptors:@[sortDescriptor]]; NSLog(@"Sorted Array Response -%@", sortedMSArray); ,其中的每个单元格都代表聊天视图中的消息。每次添加新单元格时,我都会设置顶部内容偏移量,以便单元格“粘贴”#34;在UICollectionView的底部和新的推送单元格如下:

UICollectionView

这很好用。但是,在8秒后,我移除了------------ |----- | // This space represents a content offset from the top |----- A B C D // Each of these is a UICollectionViewCell ------------ 顶部的UICollectionViewCell。这使得剩余的单元格向上移动以填充其位置,然后我设置内容偏移量以适应丢失的单元格,并且它们都向下移动以表现为它们被卡在UICollectionView的底部。如何才能删除顶部UICollectionView并不会使其余的单元格像这样跳来跳去?

2 个答案:

答案 0 :(得分:0)

不要使用contentOffset属性来操纵顶部偏移。在UICollectionViewcontentOffsetcontentSize等所有属性均由UICollectionViewLayout管理,可根据您的具体需求进行自定义。至于我,有两种选择(按优先顺序):

1)寻找自定义布局(或自行实施),让您实现所需的聊天行为

2)在collectionView的顶部插入一个虚拟空单元格,每次删除/添加任何新单元格时,通过使其布局无效或仅调用来管理虚拟高度单元格以达到目标collectionView.reloadItems([IndexPath(row: 0, section: 0)])

答案 1 :(得分:0)

我通过删除对contentOffset的需求并使用以下步骤解决了这个问题:

  1. 执行UICollectionViewcollectionView.transform = CGAffineTransform(a: 1, b: 0, c: 0, d: -1, tx: 0, ty: 0)

  2. 的180度旋转
  3. 在collectionView中的每个单元格的contentView上应用转换:cell.contentView.transform = collectionView.transform

  4. collectionView中使用的反向数据数组:myData.reversed()