iOS 7 为我提供了不同的 CGSize 宽度和高度

标签 ios objective-c uilabel ios7 cgsize

我的应用在 iOS 7 上有问题

我使用以下方法计算我的标签尺寸:

CGSize constraint = CGSizeMake(275, 141);
CGSize size;

size = [_rtLabelQuestion.plainText sizeWithFont:[UIFont fontWithName:@"KGWhattheTeacherWants" size:intFont] constrainedToSize:constraint lineBreakMode:NSLineBreakByTruncatingTail];

然后使用以下方法放置我的标签框:

_rtLabelQuestion.frame = CGRectMake(aLabelTemp.frame.origin.x, aLabelTemp.frame.origin.y, size.width + 2 , size.height + 10);

但是在 iOS 7 上,我的 CGSize 的宽度和高度总是小于 intFont 像素,我一直在研究这 2 天,但没有解决方案,请帮忙,谢谢!

最佳答案

您传递给 -[UIFont fontWithName:size:]size: 是字体的磅值

您从 -[NSString sizeWithFont:constrainedToSize:lineBreakMode:] 返回的大小是字符串中布局字形的实际大小

如果您希望给定的字符串具有特定的大小,在特定的面上,您可能必须执行牛顿法类型迭代,在该迭代中更改要传递的点大小,直到布局大小接近足够你想要的。 (我不希望这样的操作在一般情况下会很快,顺便说一句。)它可能看起来像这样:

NSString* theString = @"FOOBAR";
CGSize constraint = CGSizeMake(275, 12);
CGFloat desiredHeight = 12.0;
CGFloat pointSize = desiredHeight;
CGFloat actualHeight = 0;
do {
    CGSize size = [theString sizeWithFont: [UIFont fontWithName:@"Helvetica" size: pointSize] constrainedToSize: constraint lineBreakMode:NSLineBreakByTruncatingTail];
    actualHeight = size.height;
    CGFloat ratio = actualHeight / desiredHeight;
    pointSize = pointSize / ratio;
} while (fabs(actualHeight - desiredHeight) > 0.01);

PS:-[NSString sizeWithFont:constrainedToSize:lineBreakMode:] 在 iOS7 中已弃用。编译器告诉我使用 -boundingRectWithSize:options:attributes:context:] 代替。使用新的推荐方法,它可能看起来像这样:

NSString* theString = @"FOOBAR";
CGSize constraint = CGSizeMake(275, 12);
CGFloat desiredHeight = 12.0;
CGFloat pointSize = desiredHeight;
CGFloat actualHeight = 0;
NSStringDrawingContext* ctx = [[NSStringDrawingContext alloc] init];
do {
    CGRect br = [theString boundingRectWithSize: constraint options: 0 attributes: @{ NSFontAttributeName : [UIFont fontWithName:@"Helvetica" size: pointSize] } context:ctx];
    actualHeight = br.size.height;
    CGFloat ratio = actualHeight / desiredHeight;
    pointSize = pointSize / ratio;
} while (fabs(actualHeight - desiredHeight) > 0.01);

关于iOS 7 为我提供了不同的 CGSize 宽度和高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18894405/

相关文章:

ios - 为什么Realm对象中没有我的属性?

ios - 相机捕获经常使应用崩溃,没有任何线索

iphone - OpenGL ES 未按预期工作

iphone - NSNumberFormatter 格式化美国电话号码

ios - 通过方法创建后标记缺少的属性

ios - 更新 UITableViewCell subview 的框架没有效果

swift - 我的按钮在 iPhone 6 和 6 plus 上居中,但在 iPhone 5 上则不然

c++ - 来自高方差区域 OpenCV 的文本边界框

ios - Storyboard 中的 UITextView - 有没有办法以编程方式附加文本?

ios - 从后台返回后,Alamofire 进度回调停止工作