2014-01-16 2 views
3
@interface PromotionsListViewController : UITableViewController 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
static NSString *CellIdentifier = @"PromotionCell"; 
PromotionCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[PromotionCell alloc] init]; 
} 

// Configure the cell... 
Promotion *promotion = [self.promotionList objectAtIndex:indexPath.row]; 

[cell.imgView setImageWithURL:[NSURL URLWithString:promotion.imageURL] placeholderImage:[UIImage imageNamed:@""]]; 
cell.lblTitle.text = promotion.promotionTitle; 

return cell; 
} 
@interface PromotionCell : UITableViewCell 

@property(nonatomic, strong) UIImageView *imgView; 
@property(nonatomic, strong) UILabel *lblTitle; 

@end 
- (void)layoutSubviews { 

if (self.lblTitle.text) { 

    CGSize maxsize = CGSizeMake(300, CGFLOAT_MAX); 
    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; 
    paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; 

    CGRect calculateRect = [_lblTitle.text boundingRectWithSize:maxsize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:_lblTitle.font, NSParagraphStyleAttributeName:paragraphStyle.copy} context:nil]; 

    _lblTitle.frame = CGRectMake(_lblTitle.frame.origin.x, 300 - calculateRect.size.height - 5, _lblTitle.frame.size.width, calculateRect.size.height); 

} else { 
    _lblTitle.frame = CGRectZero; 
} 
} 
- (UILabel *)lblTitle { 

if (!_lblTitle) { 

    _lblTitle = [[UILabel alloc] initWithFrame:CGRectMake(10, 250, 300, 50)]; 
    _lblTitle.font = [UIFont boldSystemFontOfSize:22.0f]; 
    _lblTitle.numberOfLines = 0; 
    _lblTitle.lineBreakMode = NSLineBreakByWordWrapping; 
    [self.contentView addSubview:_lblTitle]; 
} 
return _lblTitle; 
} 

Может кто-нибудь плз скажите мне, что я делаю неправильно? Я надеюсь, что мой вопрос ясен.- [__ NSCFString boundingRectWithSize: Опции: атрибуты: контекст]: непризнанные селектор направлен например

+0

Я думаю, что сообщение об ошибке довольно ясно ... Вы вызываете boundingRectWithSize для объекта, который не распознает метод. Где находится ошибка? Можете ли вы просто удалить свой код, который не имеет ничего общего с сообщением об ошибке? –

+0

Вы используете этот код на симуляторе/устройстве iOS 7 или предыдущем? Выполнение предыдущей версии iOS приведет к этой ошибке, поскольку метод 'boundingRectWithSize:' введен в iOS 7. – Geek

+0

@Geek Это неверно. 'boundingRectWithSize:' был введен в iOS 6. Источник: [Библиотека разработчиков Apple] (https://developer.apple.com/library/ios/documentation/uikit/reference/NSAttributedString_UIKit_Additions/Reference/Reference.html#//apple_ref/ occ/instm/NSAttributedString/boundingRectWithSize: options: context :) –

ответ

8

У меня тоже была эта проблема. Оказывается, существуют два аналогичных метода для boundingRectWithSize:. Один для NSString и один для NSAttributedString.

Следующие за NSAttributedString доступен для IOS 6 и выше:

- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options context:(NSStringDrawingContext *)context

Другого метода NSString (который вы используете) доступен только на прошивке 7:

- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context

Так что просто позвоните по методу boundingRectWithSize: без дополнительного поля Attributes: в вашей Attributed String, и он отлично работает на iOS 6.

+0

Сохранял мне много времени на учебу. Спасибо. – John

+0

@Jack Dewhurst, я удалил 'Атрибуты:', но ошибка: 'Нет видимых @interface для NSString объявляет селектор boundingRectWithSize: options: context:' – Gank

+0

Решенный путем преобразования NSString в NSAttributedString – Gank

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

  • Нет связанных вопросов^_^