使用sizeWithAttribute获取UITextView的确切大小

时间:2014-05-26 20:24:18

标签: ios objective-c uitextview sizetofit

我有一个UISlider,可以更改UITextView的字体大小。在更改字体大小之前,我想检查UITextView的高度是否低于其视图容器的高度。问题是sizeToFitsizeWithAttribute对于相同的字体大小返回不同的高度。

为了做到这一点,我试图用自定义fontSize获取UITextView的高度,但我无法找到一种方法这样做,并且不明白我为什么不这样做我做的高度:

self.photoDescription.text = @"Test"
self.photoDescription.font = [self.photoDescription.font fontWithSize:18];
[self.photoDescription sizeToFit];
NSLog(@"real height %f", self.photoDescription.frame.size.height); 
//getting : 37.5

NSLog(@"calculated height %f", [self.photoDescription.text sizeWithAttributes:@{NSFontAttributeName:[self.photoDescription.font fontWithSize:18]}].height);
//getting: 20.97

同样的事情:

CGRect textRect = [self.photoDescription.text boundingRectWithSize:CGSizeMake(320, 300)
                                             options:NSStringDrawingUsesLineFragmentOrigin
                                          attributes:@{NSFontAttributeName:[self.photoDescription.font fontWithSize:18]}
                                             context:nil];

CGSize size = textRect.size;
NSLog(@"height %f", size.height);
// getting : 20.97

对此有何想法?

1 个答案:

答案 0 :(得分:1)

我终于在Jordan Montel Solution中找到了我的问题答案: iOS7 UITextView contentsize.height alternative

我用他的函数得到宽度:

- (CGFloat)textViewHeightForAttributedText:(NSAttributedString *)text andWidth:(CGFloat)width
{
    UITextView *textView = [[UITextView alloc] init];
    [textView setAttributedText:text];
    CGSize size = [textView sizeThatFits:CGSizeMake(width, FLT_MAX)];
    return size.height;
}