首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >集合视图布局自大小无法工作

集合视图布局自大小无法工作
EN

Stack Overflow用户
提问于 2017-07-20 15:36:21
回答 1查看 1.9K关注 0票数 0

我的自定义集合单元格包含WKWebView。我想要使单元格高度自动达到我的WKWebView大小。但我所有打开自我大小单元格的尝试都失败了:

在我的控制器里:

代码语言:javascript
复制
var p = self.htmlNotificationsCollectionView.collectionViewLayout as? NSCollectionViewFlowLayout
p?.estimatedItemSize = CGSize(width: self.htmlNotificationsCollectionView.frame.width, height: 120)

然后,随着文档的编写,应该触发preferredLayoutAttributesFitting方法:

代码语言:javascript
复制
class HTMLNotificationCollectionViewItem: NSCollectionViewItem, WKNavigationDelegate {
    override func preferredLayoutAttributesFitting(_ layoutAttributes: NSCollectionViewLayoutAttributes) -> NSCollectionViewLayoutAttributes {
        print("got it")
    }
}

但是没有工作,方法没有调用,我的单元格有固定的高度= 120

我也试过:

代码语言:javascript
复制
class HorizontallyFlushCollectionViewFlowLayout: NSCollectionViewFlowLayout {

    override func layoutAttributesForItem(at indexPath: IndexPath) -> NSCollectionViewLayoutAttributes? {
        let attributes = super.layoutAttributesForItem(at: indexPath)?.copy() as? NSCollectionViewLayoutAttributes
        guard let collectionView = collectionView else { return attributes }
        attributes?.frame.size.width = collectionView.frame.width - sectionInset.left - sectionInset.right
        return attributes

    }

    override func layoutAttributesForElements(in rect: CGRect) -> [NSCollectionViewLayoutAttributes] {
        let allAttributes = super.layoutAttributesForElements(in: rect)
        return allAttributes.flatMap { attributes in
            switch attributes.representedElementCategory {
            case .item: return layoutAttributesForItem(at: attributes.indexPath!)
            default: return attributes
            }
        }
    }
}

但是项目中的preferredLayoutAttributesFitting仍然没有调用:

代码语言:javascript
复制
override func preferredLayoutAttributesFitting(_ layoutAttributes: NSCollectionViewLayoutAttributes) -> NSCollectionViewLayoutAttributes {
        print("DSADASDADASD")
        return layoutAttributes
    }

新增测试项目:

https://github.com/Arti3DPlayer/SCollectionViewTests

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-23 11:53:48

当文档写入时,应该触发preferredLayoutAttributesFitting方法

此方法的文档还包含一个特殊注意事项部分,即他说

在OSX10.11中,从未调用此方法。

如果要自定义每个项的大小,请使用NSCollectionViewDelegateFlowLayout协议的NSCollectionViewDelegateFlowLayout方法:

代码语言:javascript
复制
extension ViewController : NSCollectionViewDelegateFlowLayout {
    func collectionView(_ collectionView: NSCollectionView,
                        layout collectionViewLayout: NSCollectionViewLayout,
                        sizeForItemAt indexPath: IndexPath) -> NSSize {
        return NSSize(width: self.myCollectionView.bounds.width, height: 180)
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45219285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档