Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UICollectionView更改约束后更新单元格大小_Ios_Xamarin_Autolayout_Uicollectionview_Ios Autolayout - Fatal编程技术网

Ios UICollectionView更改约束后更新单元格大小

Ios UICollectionView更改约束后更新单元格大小,ios,xamarin,autolayout,uicollectionview,ios-autolayout,Ios,Xamarin,Autolayout,Uicollectionview,Ios Autolayout,我使用autolayout来确定单元大小(固定,可变高度),并在情节提要中设置所有必要的约束。只要我不更改约束,“自动布局”就可以正常工作 但在运行时,我必须在一些单元格中添加按钮。我删除了最后一个标签的底部约束,插入按钮并向上面的标签添加一个约束,一个前导约束到单元格,另一个约束到单元格底部 问题是,在此之后单元格大小不会更新。我试图在单元格和集合视图中调用LayoutIfNeeded,但没有成功。我认为约束设置正确。按钮显示在正确的位置,但单元格仅保持没有按钮的单元格的高度。如何告诉Coll

我使用autolayout来确定单元大小(固定,可变高度),并在情节提要中设置所有必要的约束。只要我不更改约束,“自动布局”就可以正常工作

但在运行时,我必须在一些单元格中添加按钮。我删除了最后一个标签的底部约束,插入按钮并向上面的标签添加一个约束,一个前导约束到单元格,另一个约束到单元格底部


问题是,在此之后单元格大小不会更新。我试图在单元格和集合视图中调用LayoutIfNeeded,但没有成功。我认为约束设置正确。按钮显示在正确的位置,但单元格仅保持没有按钮的单元格的高度。如何告诉CollectionView更新单元格大小?

==>您可以使用UICollectionViewFlowLayout方法itemSize属性设置UICollectionViewCell大小,也可以使用委托方法,collectionView:layout:SizeFormiteIndeXPath:如果您需要动态设置UICollectionViewCell的大小。

您可以参考以下链接,您可能可以通过手动和自动设置UICollectionViewCell的大小来获得答案


您是否尝试过
func重新加载itemsatindexpaths(indexPaths:[NSIndexPath])
?我尝试过:有一段时间,单元格高度将更新到正确的时刻。但随后再次调用cellForItemAtIndexPath,单元格高度重置,并再次调用reloadItemsAtIndexPaths。它会导致无休止的调整大小的循环。您使用哪种方法来更改约束并在GetCell中添加按钮。我需要0-5个按钮,这些按钮与单元格的左侧对齐。我想我将只制作两个原型单元格,一个带按钮,一个不带按钮。这是前面的方法(手动计算大小并使用sizeForItemAtIndexPath)。但现在它应该是布局本身。我设置的第一个约束很有效(每个单元格都有它需要的大小)。但我不能告诉UICollectionView在单元格中查找已更改的约束。对于UITableView,我也这样做了。在运行时更新约束,然后调用BeginUpdate,然后调用EndUpdate。这导致tableview更新新约束的行高度。我正在UICollectionView中搜索类似的内容。“但我无法告诉UICollectionView在单元格中查找已更改的约束。”…这是我真正想要的,但对我来说没有用处,因为它没有使用自动布局。我以前在代码中进行过高度计算,但这不是我老板想要的。解决方案是使用自动布局,否则collectionView单元格的子视图将无法正确显示。collectionView没有任何与tableView类似的高度-UITableViewAutomaticDimension的概念,而是,CollectionView采用UICollectionViewLayout的概念。默认情况下,collectionView具有UICollectionViewFlowLayout。所以,如果您不想使用sizeForItemAtIndexPath,那么您需要创建自定义布局。对于自定义布局,您可以参考链接,这将对您有更多帮助:链接答案上的注释已经说明了这一点。只要约束设置正确,就不需要在autolayout中使用sizeForItemAtIndexPath。如果约束宽度或高度,则另一个将由autolayout计算(只要使用flow layout)。