UILabel背景图像与UICollectionViewCell的标签大小相同



我在互联网上搜索了几天,但找不到任何解决方案。

最后想办法:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
   NSString *cellIdentifier=@"Cell";
   SampleImageCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
   cell.sampleImageView.image=[UIImage imageNamed:[sampleImageList objectAtIndex:indexPath.row]];
   cell.sampleTitleLabel.text=[sampleTitleArray objectAtIndex:indexPath.row];
   UIImage *img = [UIImage imageNamed:@"sample.png"];
   CGSize imgSize = cell.sampleTitleLabel.frame.size;
   CGSize maximumLabelSize = CGSizeMake(319,9999);
   CGSize expectedLabelSize = [cell.sampleTitleLabel.text sizeWithFont:cell.recipeTitleLabel.font
                                  constrainedToSize:maximumLabelSize
                                      lineBreakMode:cell.sampleTitleLabel.lineBreakMode];
   UIGraphicsBeginImageContext( imgSize );
   [img drawInRect:CGRectMake(0,0,expectedLabelSize.width,expectedLabelSize.height)];
   UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
   UIGraphicsEndImageContext();
   cell.sampleTitleLabel.backgroundColor = [UIColor colorWithPatternImage:newImage];
   return cell;
}

我已经看到IOS7的一些更新版本,但还没有尝试。希望这个代码能帮助到别人!

我认为问题在于你获取标签大小的方式,在iOS 7中,方法sizeWithFont: constrainedToSize: lineBreakMode:被弃用,尝试使用以下代码:

...
CGSize maximumLabelSize = CGSizeMake(319,9999);
CGRect labrect = [cell.sampleTitleLabel.text boundingRectWithSize:maximumLabelSize 
                                             options:NSStringDrawingUsesLineFragmentOrigin
                                             attributes:@{NSFontAttributeName:cell.recipeTitleLabel.font} 
                                             context:Nil];
UIGraphicsBeginImageContext( imgSize );
[img drawInRect:CGRectMake(0,0,labrect.size.width,labrect.size.height)];
...

最新更新