UIFont: я не могу получить размер шрифта. Почему мой шрифт равен нулю?

Я не могу получить размер шрифта. Почему мой шрифт равен нулю?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kQuestionIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kQuestionIdentifier] autorelease]; } cell.textLabel.text = [self extractText:indexPath forLabelAttribute:kTextLabel]; cell.textLabel.lineBreakMode = UILineBreakModeWordWrap; cell.textLabel.numberOfLines = 0; NSLog(@"______font family%@", cell.textLabel.font.familyName); NSLog(@"______font name%@", cell.textLabel.font.fontName); NSLog(@"______font size%f", cell.textLabel.font.pointSize); 

И журнал:

 ______font family.Helvetica NeueUI ______font name.HelveticaNeueUI-Bold ______font size0.000000 

One Solution collect form web for “UIFont: я не могу получить размер шрифта. Почему мой шрифт равен нулю?”

Я заметил эту проблему при создании первого представления таблицы. Последующие взгляды не проявляют такого поведения в моем случае. Другими словами, шрифт явно инициализируется после tableView: cellForRowAtIndexPath: для первого построенного представления таблицы.

Один из способов обойти это – обеспечить правильную инициализацию шрифтов в конструкторе ячейки:
Определите новый конструктор UITableViewCell в категории и создайте новые шрифты для textLabel и detailTextLabel с тем, что вы по умолчанию выбираете после вызова super initWithStyle :.

Две стратегии строительства:

  • используйте этот новый конструктор только в затронутых табличных представлениях и убедитесь, что ваши значения по умолчанию соответствуют настройкам ОС по умолчанию.

  • В качестве альтернативы замените все вызовы конструктора UITableViewCell этим новым конструктором, чтобы обеспечить согласованность для всех представлений таблиц и опустить проверку для pointSize. Скорее всего, я буду придерживаться этой стратегии, поскольку изменения в ОС будут изменены в будущих версиях ОС.

Вы можете использовать значения по умолчанию, перечисленные здесь в качестве ссылки. Хотя, я думаю, они изменились с iOS 4.2: размер шрифта по умолчанию UITableViewCell

Вы можете в качестве альтернативы регистрировать их с помощью симулятора, чтобы обнаружить их самостоятельно во втором сконфигурированном UITableView.

Пример кода:

Ячейки по умолчанию:

 #define kCellStyleSubtitleTextLabelFont @"Helvetica-Bold" #define kCellStyleSubtitleTextLabelFontSize 18.0f #define kCellStyleSubtitleDetailLabelFont @"Helvetica" #define kCellStyleSubtitleDetailLabelFontSize 14.0f #define kCellStyle1TextLabelFont @"Helvetica-Bold" #define kCellStyle1TextLabelFontSize 17.0f #define kCellStyle1DetailLabelFont @"Helvetica Bold" #define kCellStyle1DetailLabelFontSize 15.0f #define kCellStyle2TextLabelFont @"Helvetica-Bold" #define kCellStyle2TextLabelFontSize 12.0f #define kCellStyle2DetailLabelFont @"Helvetica" #define kCellStyle2DetailLabelFontSize 15.0f 

UITableViewCell Категория:

 @interface UITableViewCell (fontDefaults) -(id) initWithCellStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier; @end #define kCheckPointSize 0 @implementation UITableViewCell (fontDefaults) -(id) initWithCellStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { self = [self initWithStyle:style reuseIdentifier:reuseIdentifier]; if(self == nil) return nil; switch (style) { case UITableViewCellStyleValue1: { //Left aligned label on left and right aligned label on right with blue text (Used in Settings) #if kCheckPointSize if(self.textLabel.font.pointSize == 0) #endif self.textLabel.font = [UIFont fontWithName:kCellStyle1TextLabelFont size:kCellStyle1TextLabelFontSize]; #if kCheckPointSize if(self.detailTextLabel.font.pointSize == 0) #endif self.detailTextLabel.font = [UIFont fontWithName:kCellStyle1DetailLabelFont size:kCellStyle1DetailLabelFontSize]; break; } case UITableViewCellStyleValue2: { //Right aligned label on left with blue text and left aligned label on right (Used in Phone/Contacts) #if kCheckPointSize if(self.textLabel.font.pointSize == 0) #endif self.textLabel.font = [UIFont fontWithName:kCellStyle2TextLabelFont size:kCellStyle2TextLabelFontSize]; #if kCheckPointSize if(self.detailTextLabel.font.pointSize == 0) #endif self.detailTextLabel.font = [UIFont fontWithName:kCellStyle2DetailLabelFont size:kCellStyle2DetailLabelFontSize]; break; } case UITableViewCellStyleSubtitle: { //Left aligned label on top and left aligned label on bottom with gray text (Used in iPod). #if kCheckPointSize if(self.textLabel.font.pointSize == 0) #endif self.textLabel.font = [UIFont fontWithName:kCellStyleSubtitleTextLabelFont size:kCellStyleSubtitleTextLabelFontSize]; #if kCheckPointSize if(self.detailTextLabel.font.pointSize == 0) #endif self.detailTextLabel.font = [UIFont fontWithName:kCellStyleSubtitleDetailLabelFont size:kCellStyleSubtitleDetailLabelFontSize]; break; } default: //default cell style case UITableViewCellStyleDefault: { //Simple cell with text label and optional image view (behavior of UITableViewCell in iPhoneOS 2.x). No detailTextLabel #if kCheckPointSize if(self.textLabel.font.pointSize == 0) // #endif self.textLabel.font = [UIFont fontWithName:kCellStyle1TextLabelFont size:kCellStyle1TextLabelFontSize]; break; } } return self; } @end 

Пример построения в таблицеView: cellForRowAtIndexPath:

 static NSString *CellIdentifier = @"Style2Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithCellStyle:UITableViewCellStyleValue2 reuseIdentifier:CellIdentifier] autorelease]; cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; cell.selectionStyle = UITableViewCellSelectionStyleNone; } 
  • Как обновить UILabel в Xcode программно без файлов XIB?
  • Автоопределение UILabel в UITableViewCell
  • Получить разрыв строки в UILabel из-за Autolayout
  • Как отобразить символ верхнего индекса% как строку в UIlabel?
  • NSAttributedString с угловым радиусом и Word Wrap?
  • Использование пользовательского шрифта в Attributed UILabel
  • Добавить жест нажатия к части UILabel
  • TTTAttributedLabel "Подробнее>" Усечение хвоста с несколькими атрибутами возможно?
  • Вертикально выравнивать текст вверху в UILabel
  • Анимация вертикального текста прокрутки
  • UILabel не будет переносить слова в UIScrollView с помощью AutoLayout
  • Interesting Posts

    Целевое приложение iPhone по модели (например, 3G против 3GS)

    iPhone6 ​​(без режима масштабирования дисплея) UIMenuController усечен

    IBAction & Buttons программно

    Как удалить все элементы keychain, доступные для приложения?

    Хранить NSDictionary в брелках

    Организатор в Xcode 6.3.2 – Нет двоичного размера оценки

    Замедленный или скрытый заголовок раздела UITableView при переключении с одного источника данных на другой и в режиме реального времени UITableView

    Формат строки iOS в минутах и ​​секундах

    iOS MapKit Изменение типа mapview приводит к тому, что изображение аннотации изменяется на pin?

    Автономные уведомления в iOS

    UIWebView загружается очень медленно, когда он отображается в определенном UIViewController

    Вызов веб-службы с помощью phonegap (ios)

    UIPickerView, поскольку inputView не скрывается на iPad

    CocoaHTTPServer на iOS: настройте сервер, чтобы пользователь мог скачать NSData как файл

    В чем разница между NSURLSessionDataTask и NSURLSessionDownloadTask

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.