alm*_*mas 9 ios autolayout uicollectionview
我有一个带有自定义流布局的集合视图,以及许多不同高度的不同单元格.集合视图的宽度在设备旋转时更改,因此单元格的宽度必须相应更改.为此,我实现了"sizeForItemAtIndex"方法,并根据当前的界面方向返回不同的大小.大多数单元格不会改变它们的高度,但是,只要用户点击它就会有一个单元格要扩展和折叠.您可以假设单元格只有一个带有一行或多行文本的UILabel.当单元格第一次出现时,行数设置为1,当用户点击单元格时,行数设置为0,此处单元格应使用标签的内在大小自动更改其高度.我怎样才能达到这个效果?以下是它应该是什么样子的示例:

Mih*_*awk 11
跟着这些步骤:
1).创建一个名为isExpanded管理展开/折叠的布尔变量
2.)向show more按钮添加目标和操作
[yourCellName.btnShowMore addTarget:self action:@selector(ShowMoreButtonClicked) forControlEvents:UIControlEventTouchUpInside];
Run Code Online (Sandbox Code Playgroud)
3.)在sizeForItemAtIndexPath中管理高度,添加:
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
if (isExpanded && indexPath.row == 0) {
return CGSizeMake(CGRectGetWidth(self.view.frame), calculated height for the expanded cell);
}
return CGSizeMake(CGRectGetWidth(self.view.frame), default height);
}
Run Code Online (Sandbox Code Playgroud)
4.)然后在ShowMoreButtonClicked方法中
- (void)ShowMoreButtonClicked{
if (isExpanded) {
isExpanded = FALSE;
[collection_viewCus reloadItemsAtIndexPaths:@[[NSIndexPath indexPathForRow:0 inSection:0]]];
}
else {
isExpanded = TRUE;
[collection_viewCus reloadItemsAtIndexPaths:@[[NSIndexPath indexPathForRow:0 inSection:0]]];
}}
Run Code Online (Sandbox Code Playgroud)
5.)在cellForItemAtIndexPath中添加此行
[yourCellName layoutIfNeeded];
Run Code Online (Sandbox Code Playgroud)
6.)构建和运行
| 归档时间: |
|
| 查看次数: |
6772 次 |
| 最近记录: |