Шрифт NSAttributedString не перекрывает шрифт xib при первой загрузке ячейки - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть ячейка таблицы с меткой. В xib-файле для ячейки на этом ярлыке установлен небольшой шрифт. В моем методе cellForRow я устанавливаю свойство attributeText метки для некоторой строки, используя большой шрифт. Когда мой контроллер представления загружается, он первоначально использует маленький шрифт, указанный в xib. Когда я прокручиваю ячейку вне поля зрения и снова прокручиваю ее в поле зрения (т.е. перезагружаю ячейку), используется правильный большой шрифт. Как я могу принять правильный шрифт при первой загрузке?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
      //initialize/dequeue cell from table
      [cell configureLabelWith:[[NSAttributedString alloc] initWithString:@"Hi!"
                                                            attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:24.0]}];
- (void)configureLabelWith:(NSAttributedString *)title {
    self.label.attributedText = title;

1 Ответ

0 голосов
/ 12 февраля 2020

В моем случае tableview контроллера представления вызывает layoutSubviews после вызова cellForRow. При создании подпредставлений он возвращает свойства метки обратно к тому, что было указано в xib (не уверен, что это стандартное поведение). В качестве обходного пути я сохраняю атрибутивную строку в ячейке и снова перезаписываю ее в traitCollectionDidChange, который происходит после размещения ячейки, поэтому я внес следующие изменения в класс ячейки

@property (nonatomic, strong) NSAttributedString *labelAttributedString;

- (void)configureLabelWith:(NSAttributedString *)title {
    self.labelAttributedString = title;
    self.label.attributedText = self.labelAttributedString;
- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
    [super traitCollectionDidChange:previousTraitCollection];
    [self configureLabelWith:self.labelAttributedString];
...