gpt4 book ai didi

ios - CollectionView 中的标签重叠

转载 作者:行者123 更新时间:2023-12-01 18:37:33 25 4
gpt4 key购买 nike

我已经用图像和标签实现了 Collection View 。图像工作正常,但标签重叠。我已经实现了所有必需的方法,但找不到标签重叠的问题。下面提供了我的代码

 - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return 40;
}
//loading data
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];

aProduct=[featuredProductsArray objectAtIndex:indexPath.row];
UIImageView* imageView=[[UIImageView alloc]initWithFrame:CGRectMake(10, 10, cell.frame.size.width-20, cell.frame.size.width-20)];
//imageView.image=[UIImage imageNamed:@"ad_share.png"];
NSString* imageUrl=[aProduct.SmallImageLists firstObject];

[imageView sd_setImageWithURL:[NSURL URLWithString:imageUrl]
placeholderImage:[UIImage imageNamed:@"ad_share.png"]];

[cell addSubview:imageView];

UILabel *lblTitle=[[UILabel alloc]initWithFrame:CGRectMake(5, cell.frame.size.height-60, cell.frame.size.width, 30)];
lblTitle.text=aProduct.DealTitle;
lblTitle.font=[UIFont fontWithName:@"HelveticaNeue-Thin" size:12.0];
lblTitle.textAlignment=NSTextAlignmentCenter;
[cell addSubview:lblTitle];



UILabel *lblPrice=[[UILabel alloc]initWithFrame:CGRectMake(5, cell.frame.size.height-30, cell.frame.size.width, 30)];
lblPrice.text=aProduct.DealPrice;
lblPrice.font=[UIFont fontWithName:@"HelveticaNeue-Bold" size:12.0];
lblPrice.textAlignment=NSTextAlignmentCenter;
[cell addSubview:lblPrice];


cell.backgroundColor=[UIColor colorWithRed:228.0/255.0 green:228.0/255.0 blue:228.0/255.0 alpha:0.5];
[cell.layer setCornerRadius:5.0f];
[cell.layer setBorderColor:[UIColor lightGrayColor].CGColor];
[cell.layer setBorderWidth:0.2f];
[cell.layer setShadowColor:[UIColor colorWithRed:225.0/255.0 green:228.0/255.0 blue:228.0/255.0 alpha:1.0].CGColor];
[cell.layer setShadowOpacity:1.0];
[cell.layer setShadowRadius:5.0];
[cell.layer setShadowOffset:CGSizeMake(5.0f, 5.0f)];

return cell;
}

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
return CGSizeMake(self.view.frame.size.width/2-10, self.view.frame.size.width/2+30);
}

截图如下
enter image description here

最佳答案

问题是因为细胞被重复使用。每次重复使用它们时,您都会在单元格上添加更多标签和图像。这就是为什么您看到标签重叠的原因。

在我看来,有两种方法可以解决它:

  • 创建 UICollectionViewCell 的子类.创建 UIImage s 和 UILabel s 当单元格在子类上初始化时。安上cellForItemAtIndexPath使用 UIImage s 和 UILabel s 无需再次初始化它们。例如
    - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
    {
    UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];

    aProduct=[featuredProductsArray objectAtIndex:indexPath.row];

    NSString* imageUrl=[aProduct.SmallImageLists firstObject];

    [cell.imageView sd_setImageWithURL:[NSURL URLWithString:imageUrl]
    placeholderImage:[UIImage imageNamed:@"ad_share.png"]];

    cell.lblTitle.text=aProduct.DealTitle;
    cell.lblTitle.font=[UIFont fontWithName:@"HelveticaNeue-Thin" size:12.0];
    cell.lblTitle.textAlignment=NSTextAlignmentCenter;


    cell.lblPrice.text=aProduct.DealPrice;
    cell.lblPrice.font=[UIFont fontWithName:@"HelveticaNeue-Bold" size:12.0];
    cell.lblPrice.textAlignment=NSTextAlignmentCenter;


    cell.backgroundColor=[UIColor colorWithRed:228.0/255.0 green:228.0/255.0 blue:228.0/255.0 alpha:0.5];
    [cell.layer setCornerRadius:5.0f];
    [cell.layer setBorderColor:[UIColor lightGrayColor].CGColor];
    [cell.layer setBorderWidth:0.2f];
    [cell.layer setShadowColor:[UIColor colorWithRed:225.0/255.0 green:228.0/255.0 blue:228.0/255.0 alpha:1.0].CGColor];
    [cell.layer setShadowOpacity:1.0];
    [cell.layer setShadowRadius:5.0];
    [cell.layer setShadowOffset:CGSizeMake(5.0f, 5.0f)];

    return cell;
    }
  • 另一种方法是在重用时删除单元格的 subview 。
    - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
    {
    UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];

    // Remove subviews
    for (UIView *v in cell.contentView.subviews) {
    [v removeFromSuperview];
    }

    aProduct=[featuredProductsArray objectAtIndex:indexPath.row];
    UIImageView* imageView=[[UIImageView alloc]initWithFrame:CGRectMake(10, 10, cell.frame.size.width-20, cell.frame.size.width-20)];
    //imageView.image=[UIImage imageNamed:@"ad_share.png"];
    NSString* imageUrl=[aProduct.SmallImageLists firstObject];

    [imageView sd_setImageWithURL:[NSURL URLWithString:imageUrl]
    placeholderImage:[UIImage imageNamed:@"ad_share.png"]];

    [cell addSubview:imageView];

    UILabel *lblTitle=[[UILabel alloc]initWithFrame:CGRectMake(5, cell.frame.size.height-60, cell.frame.size.width, 30)];
    lblTitle.text=aProduct.DealTitle;
    lblTitle.font=[UIFont fontWithName:@"HelveticaNeue-Thin" size:12.0];
    lblTitle.textAlignment=NSTextAlignmentCenter;
    [cell addSubview:lblTitle];



    UILabel *lblPrice=[[UILabel alloc]initWithFrame:CGRectMake(5, cell.frame.size.height-30, cell.frame.size.width, 30)];
    lblPrice.text=aProduct.DealPrice;
    lblPrice.font=[UIFont fontWithName:@"HelveticaNeue-Bold" size:12.0];
    lblPrice.textAlignment=NSTextAlignmentCenter;
    [cell addSubview:lblPrice];


    cell.backgroundColor=[UIColor colorWithRed:228.0/255.0 green:228.0/255.0 blue:228.0/255.0 alpha:0.5];
    [cell.layer setCornerRadius:5.0f];
    [cell.layer setBorderColor:[UIColor lightGrayColor].CGColor];
    [cell.layer setBorderWidth:0.2f];
    [cell.layer setShadowColor:[UIColor colorWithRed:225.0/255.0 green:228.0/255.0 blue:228.0/255.0 alpha:1.0].CGColor];
    [cell.layer setShadowOpacity:1.0];
    [cell.layer setShadowRadius:5.0];
    [cell.layer setShadowOffset:CGSizeMake(5.0f, 5.0f)];

    return cell;
    }
  • 关于ios - CollectionView 中的标签重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49894824/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com