objective-c - Comment implémenter plusieurs mises en page dans une vue de collection?
漂亮男人
漂亮男人 2017-05-02 09:29:10
0
0
682

La page d'accueil a été révisée. Les styles sont comme indiqué dans les figures 1 et 2. Puisque 1 aura une ligne supplémentaire, je l'ai développée moi-même selon iOS - une méthode pour résoudre le problème posé par l'espacement des cellules de UICollectionView. ne correspond pas aux paramètres. J'ai réécrit une classe qui hérite de UICollectionViewFlowLayout LCHomeFlowLayout, son fichier .m est implémenté comme suit :

#import "LCHomeFlowLayout.h"

@implementation LCHomeFlowLayout

-(NSArray<UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect
{
    NSMutableArray* attributes = [[super layoutAttributesForElementsInRect:rect] mutableCopy];
    
    //从第二个循环到最后一个
    for(int i = 1; i < [attributes count]; ++i) {
        //当前attributes
        UICollectionViewLayoutAttributes *currentLayoutAttributes = attributes[i];
        //上一个attributes
        UICollectionViewLayoutAttributes *prevLayoutAttributes = attributes[i - 1];
        //我们想设置的最大间距,可根据需要改
        NSInteger maximumSpacing = 0;
        //前一个cell的最右边
        NSInteger origin = CGRectGetMaxX(prevLayoutAttributes.frame);
        //如果当前一个cell的最右边加上我们想要的间距加上当前cell的宽度依然在contentSize中,我们改变当前cell的原点位置
        //不加这个判断的后果是,UICollectionView只显示一行,原因是下面所有cell的x值都被加到第一行最后一个元素的后面了
        if(origin + maximumSpacing + currentLayoutAttributes.frame.size.width < self.collectionViewContentSize.width) {
            CGRect frame = currentLayoutAttributes.frame;
            frame.origin.x = origin + maximumSpacing;
            currentLayoutAttributes.frame = frame;
        }
    }
    return attributes;
}

@end

Après avoir couru ainsi, l'espacement entre les éléments en 2 n'est plus là, mais je l'ai fixé à 10. Comment puis-je y parvenir ?
Ma vue de collection est initialisée comme suit :

 UICollectionViewFlowLayout *flow = [[UICollectionViewFlowLayout alloc]init];
//    LCHomeFlowLayout *flow = [[LCHomeFlowLayout alloc]init];
 _collectionView = [[UICollectionView alloc]initWithFrame:CGRectMake(0, 0, ScreenWidth, ScreenHeight - 50) collectionViewLayout:flow];

Bien que la vue de collection ait l'attribut @property (nonatomic, strong) UICollectionViewLayout *collectionViewLayout;, comment l'appeler ?

漂亮男人
漂亮男人

répondre à tous(0)
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal