uitextview在固定高度情况下如何缩小文字来适应界面

陈昭良 发布于 2013/04/23 09:14
阅读 1K+
收藏 0
uitextview在固定高度情况下如何缩小文字来适应界面

比如我的uitextview的高度是60,我一开始文字大小就是60,刚好填充整个高度,当我不断输入文字。文字有两行的时候。我要自动缩小文字大小为30,就刚好能填充整个高度,如果是三行的时候就变成20,四行就是15。
这个逻辑怎么写呢?
有人支招吗??
加载中
0
李远超
李远超
我想你说的60、30、15都是文字的高度吧!那么你想文字的高度缩小为原来的一半,宽度还保持不变嘛?如果宽度不变,这个还真的很难。如果是宽度也变,那就不是你想象的那样了,宽度也会变小,变小后就不会分成两行了。
0
李远超
李远超

我写了一点代码,你可以去参考一下,改改应该可以达到你的目的。

@interface APPViewController () {
    CGFloat _textFontSize;// 当前文本字号,因为你说的是高度,所以字号还要计算
    NSInteger _textRowCount;// 当前文本的行数
}

@end

@implementation APPViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    _textFontSize = 40.0;
    _textRowCount = 1;
    UITextView *textView = [[UITextView alloc] init];
    [textView setFrame:CGRectMake(20.0, 20.0, 250.0, 60.0)];
    textView.delegate = self;
    [textView setFont:[UIFont systemFontOfSize:[self _getTextFontSizeWithTextHeight:textView.frame.size.height]]];
    [self.view addSubview:textView];
    [textView release];
}

/**
 * 计算字号
 **/
- (CGFloat)_getTextFontSizeWithTextHeight:(CGFloat)p_textHeight {
    CGFloat retSize = 1.0;
    while ([@"text" sizeWithFont:[UIFont systemFontOfSize:retSize]].height < p_textHeight) {
        retSize++;
    }
    return retSize;
}

/**
 * 代理方法,每次textView的改变都会调用,判断字号是否合适
 **/
- (void)textViewDidChange:(UITextView *)textView {
    NSLog(@"this text is %@", textView.text);
    CGFloat textWidth = [textView.text sizeWithFont:[UIFont systemFontOfSize:_textFontSize]].width;
    if (textWidth >= textView.frame.size.width * _textRowCount) {
        _textFontSize = [self _getTextFontSizeWithTextHeight:textView.frame.size.height / (2 * _textRowCount)];
        _textRowCount++;
        [textView setFont:[UIFont systemFontOfSize:_textFontSize]];
    }
}

班长
这代码写的有点吊,但是我发现点问题,1,第一行字还没写满行字就变小变两行了,只有在第一行时才会发现这种情况。2,删除文字,字号没有变大,
0
Railgun
Railgun
我很好奇为什么楼主会有这么奇特的需求……
返回顶部
顶部