2013-12-17 2 views
0

Я искал в Интернете пару дней, но не смог найти решение.UILabel фоновое изображение одинаковой ширины этикетки с UICollectionViewCell

Наконец выяснить, как это сделать:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ 

    NSString *[email protected]"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, но еще не пробовал. Надеюсь, что этот код поможет кому-то!

ответ

0

Я думаю, что проблема в том, каким образом вы берете размер этикетки, в прошивкой 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)]; 

... 
Смежные вопросы