ios - 当添加到 UICollectionView 时,layoutSubviews 会卡住应用程序

标签 ios swift uicollectionview uicollectionviewflowlayout

我希望在我的自定义 UICollectionView 获得其大小时收到通知。它是从 xib 创建的。 我添加了以下功能:

override func layoutSubviews() {
    let layout = UICollectionViewFlowLayout()
    layout.scrollDirection = .vertical
    layout.itemSize = CGSize(width: segmentWidth(), height: segmentHeight())
    self.setCollectionViewLayout(layout, animated: false)
}

这个函数被无限地调用。我究竟做错了什么?

最佳答案

当 Collection View 更改时,您不需要像这样更新布局。

事实上,因为您使用的是流布局,所以应该有一种更简单的方法让它执行您想要的操作。

我认为 segmentHeightsegmentWidth 是依赖于 Collection View 大小的函数,这就是您需要重新计算它们的原因?

如果是这样,那么您应该能够使用 UICollectionViewFlowLayoutdelegate 函数。

首先使用新协议(protocol)更新您的 View Controller ...

class MyViewController: UICollectionViewDelegateFlowLayout

这将使您的 View Controller 充当流布局的委托(delegate)。

并使用该方法...

func collectionView(UICollectionView, layout: UICollectionViewLayout, sizeForItemAt: IndexPath) -> CGSize {
    return CGSize(width: segmentWidth(), height: segmentHeight())
}

应该就是这样。

如果我错过了任何内容,请告诉我,但你应该从中得到你想要的一切。

之后,只需删除 layoutSubviews 方法,它就应该按照您想要的方式执行。

关于ios - 当添加到 UICollectionView 时,layoutSubviews 会卡住应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50833935/

相关文章:

swift - 如何使用 swift 从 Parse 中检索特定的列?

ios - 来自 XIB 错误的 UITableView 和 UITableViewCell?

swift - 从 TableView 内的 Collection View 执行 segue 单击按钮

ios - 如何使用不同的单元格大小垂直渲染 UICollectionviewcell

ios - GitHub 操作 IOS xcode QA/Staging 和证书和配置文件问题

ios - UIScrollView 禁用顶部弹跳

ios - 在 UITextView 上输入文本时动态扩展 UITableViewcell

ios - 哪些限制会阻止我的 UIView 相互堆叠?

ios - UICollectionView 滚动整个页面

iOS Testflight Autorenewable 订阅的到期时间是否已损坏?