Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.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 有没有更好的方法可以在不继承的情况下获取UICollectionViewFlowLayout属性_Ios_Swift_Uicollectionview_Uicollectionviewlayout - Fatal编程技术网

Ios 有没有更好的方法可以在不继承的情况下获取UICollectionViewFlowLayout属性

Ios 有没有更好的方法可以在不继承的情况下获取UICollectionViewFlowLayout属性,ios,swift,uicollectionview,uicollectionviewlayout,Ios,Swift,Uicollectionview,Uicollectionviewlayout,我有 class MyCollectionViewLayoutA: UICollectionViewFlowLayout class MyCollectionViewLayoutB: UICollectionViewFlowLayout 因此,我想在UICollectionViewFlowLayout中添加一个函数,以获取其原始布局属性 我知道它可以通过UICollectionViewFlowLayout的子类来完成,但是有更好的方法吗 我尝试使用扩展名来实现它,但是super.layoutt

我有

class MyCollectionViewLayoutA: UICollectionViewFlowLayout
class MyCollectionViewLayoutB: UICollectionViewFlowLayout
因此,我想在
UICollectionViewFlowLayout
中添加一个函数,以获取其原始布局属性

我知道它可以通过
UICollectionViewFlowLayout
的子类来完成,但是有更好的方法吗

我尝试使用扩展名来实现它,但是
super.layouttributesforItem(at:indexPath)
将返回
nil
,而
self.layouttributesforItem(at:indexPath)
将调用其子类实现

我还尝试创建一个带有扩展名的协议,使其具有默认实现,但
self.layouttributesforitem(at:indexPath)
也将调用其子类实现,并且super不能在类成员之外使用

这是我的密码:

extension UICollectionViewFlowLayout {
    func originalLayoutAttributes() -> [Int: [UICollectionViewLayoutAttributes]]? {
        guard let collectionView = self.collectionView else { return nil }
        let numberOfSections = collectionView.numberOfSections
        if numberOfSections <= 0 {
            return nil
        }

        var sectionItemAttributes = [Int: [UICollectionViewLayoutAttributes]]()
        for section in 0 ..< numberOfSections {
            var attributesArray = [UICollectionViewLayoutAttributes]()
            for index in 0 ..< collectionView.numberOfItems(inSection: section) {
                let indexPath = IndexPath(item: index, section: section)
                var itemAttributes: UICollectionViewLayoutAttributes?
                itemAttributes = super.layoutAttributesForItem(at: indexPath)
                //itemAttributes = self.layoutAttributesForItem(at: indexPath)
                attributesArray.append(itemAttributes)
            }
            sectionItemAttributes[section] = attributesArray.isEmpty ? nil : attributesArray
        }
        return sectionItemAttributes.isEmpty ? nil : sectionItemAttributes
    }
}
扩展UICollectionViewFlowLayout{ func originalLayoutAttributes()->[Int:[UICollectionViewLayoutAttributes]]{ guard let collectionView=self.collectionView else{return nil} 设numberOfSections=collectionView.numberOfSections
如果numberOfSections你有它吗?为什么不改为尺寸呢?@dengApro没有,它还没有解决,你说的“尺寸”是什么意思?我想做一个定制的布局,UICollectionViewLayoutAttribute是必需的。你有它吗?为什么不改为尺寸呢?@dengApro没有,它还没有解决,你说的“尺寸”是什么意思?我想制作一个定制的布局,
UICollectionViewLayoutAttribute
是必需的。