Авторазмер NSTextView и его размер шрифта
Я пытаюсь сделать мой NSWindow автоматически изменяемым размером. Я изменил размеры большинства своих элементов пользовательского интерфейса, но одним из немногих оставшихся объектов, которые создают проблемы, являются NSTextViews: действительно, я не могу найти способ рассчитать новый размер шрифта после изменения размера NSTextView.
Для NSTextFields я нашел метод, который бы определял размер шрифта в зависимости от длины текста. По-видимому, не существует эквивалентного метода для многострочных текстовых контейнеров (если я просто не нашел его).
Единственное место, где я обнаружил что-то подобное, - это здесь: http://boutcher.tumblr.com/post/7842216960/nstextview-auto-resizing-text
Однако я не смог внедрить этот код в свое приложение, так как, похоже, произошла ошибка, которую я не могу исправить с помощью способа создания NSLayoutManager.
Кто-нибудь делал это в прошлом? Я подумываю о том, чтобы просто позволить пользователю изменить размер до одного размера, чтобы я мог жестко указать размер шрифта... Работать с этими NSTextViews очень сложно!
1 ответ
Увидеть sizeWithAttributes:
метод в "Справочнике по наборам приложений NSString".
Он возвращает NSSize, который вы можете сравнить с текущим frame.size textview.
Для аргумента "Атрибуты" создайте NSDictionary с NSFont в качестве объекта и NSFontAttributeName
как ключ. (Не смущайтесь этой константой. Похоже, это ключ для строки, но это не так; это ключ для самого шрифта.)
Получить строку из textview: [[yourTextView textStorage] string]
, Получите familyName используемого шрифта и его текущий размер точки, CGFloat. Составьте шрифты для проверки с помощью конструктора [NSFont fontWithName:familyName size:floatChanged]
,
Как только вы получите шрифт правильного размера, используйте его для создания новой строки NSAttributedString из старой строки. Просто используйте словарь "атрибутов", который вы создали выше (тот, который дал правильный размер) и передайте его в NSAttributedString initWithString:attributes
конструктор.
Назначьте эту атрибутивную строку для textStorage (сам подкласс NSMutableAttributedString): [[yourTextView textStorage] setAttributedString:thatYouJustMade]
,
Примечание. Если в textview используются такие атрибуты, как подчеркивание или выделение цветом перед / фоном, или шрифты, выделенные курсивом / полужирным шрифтом, вы должны получить эту информацию из textStorage и включить ее в новую приписанную строку. Это выполнимо Посмотрите на ссылки на классы для NSAttributedString и NSMutableAttributedString.