NSTextField с автоматически изменяющимся размером текста выглядит ужасно в NSCollectionView

#objective-c #cocoa #fonts #drawing #visual-glitch

#objective-c #cocoa #шрифты #рисование #визуальный сбой

Вопрос:

Здесь у меня небольшая проблема. У меня есть NSCollectionView с коллекцией представлений, в которых есть NSTextField, отображающее имена шрифтов в этих шрифтах. Вот скриншот: экран

Как вы можете видеть, некоторые шрифты выглядят сбойно, за ними стоит размер шрифта Interface Builder. Я использую этот код для установки размера шрифта в initWithFrame: NSTextField:

   float targetWidth = rect.size.width - 10;
  float targetHeight = rect.size.height - 10;

  int i;
  for (i = 10; i < 100; i  ) {
    NSDictionary *attrs = [[NSDictionary alloc] initWithObjectsAndKeys:[NSFont fontWithName:[self.font fontName] size:i], NSFontAttributeName, nil];
    NSSize strSize = [[self stringValue] sizeWithAttributes:attrs];
    [attrs release];
    if (strSize.width > targetWidth || strSize.height > targetHeight) {
      break;
    }
  }

  [self setFont:[NSFont fontWithName:[self.font fontName] size:(i - 1)]];
  

Как я могу это исправить? Это выглядит ужасно. Заранее спасибо.

Ответ №1:

Похоже, что это скорее проблема с тем, как анимируется представление коллекции. Вы включили wantsLayers для просмотра элементов вашей коллекции прототипов? Попробуйте отключить его. Также попробуйте поместить непрозрачный вид за текстовым полем, чтобы за ним не было прозрачности вплоть до самого представления коллекции, и увидите, что это улучшает ситуацию.

Если это не работает, пожалуйста, поясните, почему и как именно вы используете -initWithFrame: метод текстового поля … кажется, это странный способ ведения дел.