Форматирование шрифта приписываемой строки изменяется при удалении из очереди повторно используемой UITableViewCell

#ios #objective-c #uitableview #nsattributedstring

#iOS #цель-c #uitableview #nsатрибутируемая строка

Вопрос:

У меня есть a UITableView , который содержит ячейки, в которых я устанавливаю a NSAttributedString на a UILabel . В NSAttributedString нем есть разделы, выделенные жирным шрифтом в формате HTML <b>%@</b> by <b>%@</b> , и они корректно отображаются при первом проходе, однако при повторном вызове ячейки вся строка выделяется жирным шрифтом, а не отдельные разделы.

Я готовлю NSAttributedString с помощью этой функции.

 - (NSAttributedString *)attributedStringForString:(NSString *)string forFont:(UIFont *)font {
    NSLog(@"Get attributed string");
    string = [string stringByAppendingString:[NSString stringWithFormat:@"<style>body{font-family: '%@'; font-size:%fpx; color:#000000;}</style>",
                                              font.fontName,
                                              font.pointSize]];

    NSDictionary *options = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType};
    NSAttributedString *labelString = [[NSAttributedString alloc] initWithData:[string dataUsingEncoding:NSUTF8StringEncoding] options:options documentAttributes:nil error:nil];

    return labelString;
}
 

Ответ №1:

Есть несколько способов решить эту проблему:

1)

В вашем пользовательском UITableViewCell вы должны реализовать prepareForReuse :

 -(void)prepareForReuse{
    [super prepareForReuse];

    // Then Reset here back to default values that you want.
    self.label.font = [UIFont systemFontOfSize: 12.0f];
}
 

2)

После удаления из очереди ячейки табличного представления в вашем cellForRowAtIndexPath методе вы можете сделать что-то вроде:

 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if(cell)
{
    cell.textLabel.font = [UIFont systemFontOfSize: 12.0f];
}
 

Комментарии:

1. Отлично, спасибо, по какой-то причине по умолчанию автоматически возвращается к системному шрифту размера 17, но это легко обойти.