How to resize NSTextView according to its content?

前端 未结 4 2208
南方客
南方客 2020-12-14 09:11

I am trying to set an attributed string within NSTextView. I want to increase its height based on its content, initially it is set to some default value.

So I tried

4条回答
  •  猫巷女王i
    2020-12-14 09:34

    + (float)heightForString:(NSString *)myString font:(NSFont *)myFont andWidth:(float)myWidth andPadding:(float)padding {
         NSTextStorage *textStorage = [[NSTextStorage alloc] initWithString:myString];
         NSTextContainer *textContainer = [[NSTextContainer alloc] initWithContainerSize:NSMakeSize(myWidth, FLT_MAX)];
         NSLayoutManager *layoutManager = [[NSLayoutManager alloc] init];
         [layoutManager addTextContainer:textContainer];
         [textStorage addLayoutManager:layoutManager];
         [textStorage addAttribute:NSFontAttributeName value:myFont
                        range:NSMakeRange(0, textStorage.length)];
         textContainer.lineFragmentPadding = padding;
    
         (void) [layoutManager glyphRangeForTextContainer:textContainer];
         return [layoutManager usedRectForTextContainer:textContainer].size.height;
    }
    

    I did the function using this reference: Documentation

    Example:

    float width = textView.frame.size.width - 2 * textView.textContainerInset.width;
    float proposedHeight = [Utils heightForString:textView.string font:textView.font andWidth:width
                                       andPadding:textView.textContainer.lineFragmentPadding];
    

提交回复
热议问题