您的位置:首页 > 文旅 > 旅游 > 开发软件用什么编程软件_b2b平台的特点_免费自助建站哪个最好_挖掘关键词的工具

开发软件用什么编程软件_b2b平台的特点_免费自助建站哪个最好_挖掘关键词的工具

2024/10/5 21:13:55 来源:https://blog.csdn.net/LIUXIAOXIAOBO/article/details/142647815  浏览:    关键词:开发软件用什么编程软件_b2b平台的特点_免费自助建站哪个最好_挖掘关键词的工具
开发软件用什么编程软件_b2b平台的特点_免费自助建站哪个最好_挖掘关键词的工具

我们有时候会遇到这样的情形,就是需要展示一些动态的标签,宽度是动态的,
水平方向是一行,其实这种情况还是比较容易处理的,只是一下子想不起来,
这里做了一个相关的需求,将思路和代码记录下来,方便后续的查找
效果图
请添加图片描述

思路:就是重写自定义layout的prepare layout 方法, 在里面计算每一个item 的frame
。通过[UICollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:[NSIndexPath indexPathForItem:i inSection:0]] 方法创建 UICollectionViewLayoutAttributes 对象,然后个UICollectionViewLayoutAttributes 对象的frame赋值,这里要记录上一个UICollectionViewLayoutAttributes对象的x.及总的宽度。通过这句代码赋值frame
layoutAttributes.frame = CGRectMake(currentX, currentY, cellWidth, cellHeight);
然后将布局属性添加到一个数组中
在layoutAttributesForElementsInRect:方法中返回数组。
在 collectionViewContentSize 方法中返回宽度
还有一点,我们需要通过代理方式获取到单个item的宽度

  • (CGFloat)cellWidthForItemAtIndex:(NSInteger)index;

  • (CGFloat)footerWidthForFooterAtSection:(NSInteger)section;

代码

@protocol LIUNumberCenterAssociationLayoutDelegate <NSObject>- (CGFloat)cellWidthForItemAtIndex:(NSInteger)index;- (CGFloat)footerWidthForFooterAtSection:(NSInteger)section;@end@interface LIUNumberCenterAssociationLayout : UICollectionViewFlowLayout@property (nonatomic, weak) id <LIUNumberCenterAssociationLayoutDelegate> delegate;@end
//
//  LIUNumberCenterAssociationLayout.m
//#import "LIUNumberCenterAssociationLayout.h"@interface LIUNumberCenterAssociationLayout ()@property (nonatomic, strong) NSMutableArray<UICollectionViewLayoutAttributes *> *layoutAttributesArray;@property (nonatomic, assign) CGSize contentSize;@end@implementation LIUNumberCenterAssociationLayout- (instancetype)init {if (self = [super init]) {self.layoutAttributesArray = [NSMutableArray new];self.contentSize = CGSizeMake(16, 22); // 16是左边距}return self;
}- (void)prepareLayout {[super prepareLayout];[self updateLayout];
}- (CGSize)collectionViewContentSize {return self.contentSize;
}- (NSArray<UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect {return self.layoutAttributesArray;
}#pragma mark - ---------- update ----------- (void)updateLayout {// 移除旧的布局[self.layoutAttributesArray removeAllObjects];self.contentSize = CGSizeMake(8, 28); // 16是左边距// 计算新的布局NSInteger count = 0;if ([self.collectionView.dataSource respondsToSelector:@selector(collectionView:numberOfItemsInSection:)]) {count = [self.collectionView.dataSource collectionView:self.collectionView numberOfItemsInSection:0];}CGFloat x = 0; if (count > 0) {for (int i = 0; i < count; i++) {CGFloat currentX = x;CGFloat currentY = 0;CGFloat cellWidth = [self cellWidthForItemAtIndex:i];CGFloat cellHeight = 28;// 创建布局属性UICollectionViewLayoutAttributes *layoutAttributes = [UICollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:[NSIndexPath indexPathForItem:i inSection:0]];layoutAttributes.frame = CGRectMake(currentX, currentY, cellWidth, cellHeight);[self.layoutAttributesArray addObject:layoutAttributes];// 计算下一个item的x,以及布局更新结束检测if (i < count - 1) {x = currentX + cellWidth + 8; // 8是间距} else {x = currentX + cellWidth + 8; // 8是右边距self.contentSize = CGSizeMake(x, 0);}}}if ([self.delegate respondsToSelector:@selector(footerWidthForFooterAtSection:)]) {CGFloat footerWidth = [self.delegate footerWidthForFooterAtSection:0];UICollectionViewLayoutAttributes *layoutattribute = [UICollectionViewLayoutAttributes layoutAttributesForSupplementaryViewOfKind:UICollectionElementKindSectionFooter withIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]];layoutattribute.frame = CGRectMake(x, 0, footerWidth, 28);x += footerWidth ;self.contentSize = CGSizeMake(x, 28);[self.layoutAttributesArray addObject:layoutattribute];}
}- (CGFloat)cellWidthForItemAtIndex:(NSInteger)index {CGFloat width = 0;if ([self.delegate respondsToSelector:@selector(cellWidthForItemAtIndex:)]) {width = [self.delegate cellWidthForItemAtIndex:index];}return width;
}@end

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com