确定UITextView的最大字体大小

时间:2015-05-14 07:50:07

标签: ios swift

是否可以确定UITextView的最大字体大小,它可以将所有文本保留在内部而不进行裁剪,而其包含的文本已经设置并且保持不变。

注意:我正在使用自定义字体和Swift。

3 个答案:

答案 0 :(得分:1)

您可以计算内容的高度。然后调整框架大小。

CGSize strSize= [textView.text sizeWithFont:[UIFont systemFontOfSize:17.0] constrainedToSize:CGSizeMake(290.0,99999.0)];
frame.size.height = strSize.height

答案 1 :(得分:1)

试试这个:

- (void)ff
{
    int minSize = 12; //define a minimum font size
    int maxSize = 60; //define a maximum font size
    int size = minSize;
    for (size = minSize; size < maxSize; size++) {
        UIFont *font = [UIFont fontWithName:@"your_font_name" size:size]; // init your font
        textView.font = font;
        [textView.layoutManager glyphRangeForTextContainer:textView.textContainer];
        NSRange visibleRange = [self visibleRangeOfTextView:textView];
        if (visibleRange.length < textView.text.length) {
            size--;
            break;
        }
    }

    NSLog(@"%d", size);

    return YES;
}

- (NSRange)visibleRangeOfTextView:(UITextView *)textView {
    CGRect bounds = textView.bounds;
    UITextPosition *start = [textView characterRangeAtPoint:bounds.origin].start;
    UITextPosition *end = [textView characterRangeAtPoint:CGPointMake(CGRectGetMaxX(bounds), CGRectGetMaxY(bounds))].end;
    return NSMakeRange([textView offsetFromPosition:textView.beginningOfDocument toPosition:start],
                       [textView offsetFromPosition:start toPosition:end]);
}

为了获得最佳效果,我建议您重置textview的填充:

[textView setTextContainerInset:UIEdgeInsetsZero];
textView.textContainer.lineFragmentPadding = 0;

答案 2 :(得分:0)

首先确定最大和最小字体大小: -

static const CGFloat MAX_SIZE = 12.0;
static const CGFloat MIN_SIZE = 7.0;

其次在viewDidLoad()中设置最大字体大小

self.txtVw.font = [UIFont systemFontOfSize:MAX_SIZE]; 

第三,在textView委托方法中编写以下代码: -

- (void)textDidChange:(UITextView*)textView
{
    // This will  to adjust this sizing as per your requirement.

    self.txtVw.font = [UIFont systemFontOfSize:MAX(
        MAX_SIZE - textView.text.length, 
        MIN_SIZE
    )];
}