2014-01-15 3 views
0

Как мне настроить текст NSTextView, чтобы он соответствовал содержимому окна без необходимости прокрутки? Например, если пользователь набрал длинную строку и, если я позже вывешу строку в виде NSTextView, как я могу сделать ее так, чтобы шрифт уменьшился до небольшого размера, чтобы он соответствовал размеру окна?Как шрифт в строке NSTextView настраивается на размер NSTextView

ответ

0

В this question принятый ответ обеспечивает способ измерения высоты текста в NSTextView. Используя это, вы можете перебирать разные размеры шрифта (т. Е. От 8-18) от наибольшей до наименьшей остановки &, выбрав первый, который соответствует высоте NSTextView.

(полностью непроверенные) Код:

- (void)autoAdjustFontSizeForTextView:(NSTextView *)myView 
{ 
    int minFont = 8; 
    int maxFont = 18; 

    for (int i=maxFont; i>=minFont; i--) 
    { 
     NSFont *myFont = [NSFont fontWithName:@"Lucida Grande" size:i]; 
     int textHeight = [self heightOfStringInTextView:myView withFont:myFont]; 
     if (textHeight < [myView frame].size.height) 
     { 
      // set view font 
      [textView setFont:myFont]; 
      return; 
     } 
    } 
} 

- (int)heightOfStringInTextView:(NSTextView *)myView withFont:(NSFont *)myFont 
{ 
    NSDictionary *attributes 
     = [NSDictionary dictionaryWithObjectsAndKeys: 
     myFont,NSFontAttributeName,nil]; 
    NSAttributedString *attributedString 
     = [[NSAttributedString alloc] initWithString: 
     [myView string] attributes:attributes]; 
    CGFloat height = [attributedString heightForWidth: 
        [myView frame].size.width]; 
    return (int)height; 
} 
+0

attributedString не метод "heightForWidth:". Вы можете объяснить строку? – user3011439

+0

Как указано в связанном вопросе, вам понадобится категория [NS (Attributed) String + Geometrics] (https://github.com/jerrykrinock/CategoriesObjC/tree/master/NS (Attributed) String% 2BGeometrics). – insys

+0

«heightOfStringInTextView» ничего не возвращает, несмотря на то, что он написан как «int». Я попробовал вернуть высоту, но это привело к ошибкам в программе. Вы получили этот код для работы? – user3011439

Смежные вопросы