iOS 8 boundingRectWithSize计算错误的文本大小

时间:2014-11-26 17:32:14

标签: ios xcode ios8 uitextview

我有一个长度会改变的字符串。我有一个固定宽度和高度的textView。我想找到适合这些范围的最大字体大小。我使用boundingRectWithSize。我假设一旦它给我一个更大的值,那么我的testRect我可以降低字体,我应该是好的。但是字符串对于我的textView来说太大了。即使testRect.size.height低于我的textView.frame.size.height,我也总是要将它降低2-4点。

NSString *testString = @"This is a test string. Does it get biger?";

CGFloat height = self.textView.frame.size.height;
CGFloat width = self.textView.frame.size.width;
CGSize testSize = CGSizeMake(width, height);

CGFloat fontSize = 15;

NSDictionary *attrsDictionary;
CGRect testRect;

int i = 0;
while (i == 0) {
    attrsDictionary = @{NSFontAttributeName: [UIFont fontWithName:@"Helvetica" size:fontSize]};

    testRect = [testString boundingRectWithSize:testSize options:NSStringDrawingUsesLineFragmentOrigin attributes:attrsDictionary context:nil];

    if (testRect.size.height < testSize.height) {
        fontSize++;
    } else {
        fontSize--;
        self.textView.font = [UIFont fontWithName:@"Helvetica" size:fontSize];
        self.textView.text = testString;
        i = 1;
    }
}

1 个答案:

答案 0 :(得分:1)

如果你有一个完美的字体,你的方法应该工作。 不幸的是,完美无瑕的字体很少见,甚至系统字体也​​不常见。 这意味着您必须自己找到所需的字体调整...