【问题标题】:How to have font in NSTextView string adjust to NSTextView size如何将 NSTextView 字符串中的字体调整为 NSTextView 大小
【发布时间】:2014-01-15 03:32:44
【问题描述】:

如何在无需滚动的情况下调整 NSTextView 的文本以适应框的内容?例如,如果用户输入了一个长字符串,如果我稍后将该字符串显示为 NSTextView,我怎样才能使字体减小到足够小的大小以适应框?

【问题讨论】:

    标签: objective-c cocoa nstextview


    【解决方案1】:

    在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;
    }  
    

    【讨论】:

    • attributedString 没有用于“heightForWidth:”的方法。你能解释一下这条线吗?
    • 正如链接问题中所指出的,您需要NS(Attributed)String+Geometrics 类别。
    • 尽管“heightOfStringInTextView”被写为“int”,但它不会返回任何内容。我尝试让它返回高度,但这导致程序出错。你让这段代码工作了吗?
    • 方法实际上没有返回任何东西..在答案中编辑了它,以及方法调用。正如我所提到的,我没有测试代码。
    猜你喜欢
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多