My UICollectionView单元格包含带有多行文本的UILabel.在标签上设置文本之前,我不知道单元格的高度.

-(CGSize)collectionView:(UICollectionView *)collectionView
                 layout:(UICollectionViewLayout*)collectionViewLayout
 sizeForItemAtIndexPath:(NSIndexPath *)indexPath;

这是我观察细胞大小的最初方法.但是,在从情节提要中创建单元之前会调用该函数.

有没有一种方法可以在渲染后布局集合并调整单元格的大小,而且我知道单元格的实际大小?

推荐答案

我认为您正在寻找可以调用UICollectionView的.collectionViewLayout属性的invalidateLayout方法.此方法会重新生成布局,在您的情况下,这意味着还需要调用-collectionView: layout: sizeForItemAtIndexPath:,这是反映所需物品大小的正确位置.Jirune为如何计算它们指出了正确的方向.

invalidateLayout的用法示例见here.关于该方法,请参阅UICollectionViewLayout文档:

使当前布局无效并触发布局更新.

Discussion:

您可以随时调用此方法来更新布局信息.此方法使集合视图本身的布局无效,并立即返回.因此,可以从同一代码块多次调用此方法,而无需触发多个布局更新.实际布局更新发生在下一个视图布局更新周期中.

Edit:

对于包含自动布局约束的情节提要集合视图,需要重写UIViewControllerviewDidLayoutSubviews方法,并在此方法中调用invalidateLayout集合视图布局.

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    [yourCollectionView.collectionViewLayout invalidateLayout];
}

Objective-c相关问答推荐

react 本机WebView菜单项目props 无法在iOS&>=16上使用

UITableViewCell:如何防止蓝色 Select ​​背景不带 isSelected 属性?

等到多个网络请求都执行完毕 - 包括它们的完成块

可供学习的 iOS 示例项目

iOS 正确使用 @weakify(self) 和 @strongify(self)

UIScreen MainScreen Bounds 返回错误的大小

Objective-C 方法中的静态变量是否跨实例共享?

在 iOS 和 Mac OS X 应用程序中使用 C++

如何更改 UICollectionView 中的滚动方向?

进入编辑模式时动画自定义绘制的 UITableViewCell

当用户点击文本字段外的其他区域时如何关闭键盘?

iOS Buttons - 添加边框

如何查看 NSError?

NSHTTPCookieStorage 状态未在应用退出时保存.那里有任何明确的知识/文档吗?

IOS 中的圆形进度条

在 UITableView 中更改复选标记的 colored颜色

当 UIView 框架更改时,视图内的 AVPlayer 层不会调整大小

如何在不管理 UDID 和重新编译的情况下无线分发 ios 应用程序

将 NSDate 舍入到最接近的 5 分钟

在 iOS 6.0 的 Xcode 4.5 中我没有要求的日志(log)消息