我有一个具有不同项目大小的集合视图,我在
中声明- (CGSize)collectionView:(UICollectionView *)collectionView
layout:(UICollectionViewLayout*)collectionViewLayout
sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
FeedItem *item = [_imagesLinkArray objectAtIndex:indexPath.row];
return CGSizeMake(250, 200*item.sizeFactor);
}
在collectionView:cellForItemAtIndexPath:
中重复使用该单元格时
该项目使用已重新提供的项目大小进行渲染,而不是sizeForItemAtIndexPath:
中指定的项目。
任何想法?
答案 0 :(得分:5)
在呈现CollectionView之前,似乎在布局准备时调用collectionView:layout:sizeForItemAtIndexPath:
一次。
因此,每当您滚动并且单元格出列时,它会在准备阶段调整为collectionView:layout:sizeForItemAtIndexPath:
提供的大小。您是否期望只要具有某些indexPath的单元格可见,就会调用此方法?这样你就可以动态改变单元格大小?似乎这不是如何使用这种方法,它可以用于在布局准备阶段确定一次单元格的大小。
如果您因某些原因需要重新计算尺寸,可以使用[UICollectionViewLayout invalidateLayout]
使布局无效。
答案 1 :(得分:3)
集合视图似乎比UITableView
更少地重新计算项目。您必须通知集合视图有关基础模型的大多数更改,例如致电[collectionView reloadData]
或[collectionView insertItemsAtIndexPaths:indexPaths]
。
答案 2 :(得分:0)
如果您使用自定义布局,则需要在自定义布局类中覆盖此功能。
Sub CreateHyperLink()
Dim URL As String
URL = InputBox("Enter the link")
With Worksheets("Sheet1")
.Hyperlinks.Add Anchor:=.Range("A5"), _
Address:="http://www." & URL, _
TextToDisplay:="Google"
End With
End Sub
答案 3 :(得分:0)
您可以简单地覆盖滚动视图委托
func scrollViewDidScroll(_ scrollView: UIScrollView) {
collectionView.collectionViewLayout.invalidateLayout()
}