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

时间:2013-09-19 12:17:12

标签: 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天没有解决方案,请帮助,谢谢!

3 个答案:

答案 0 :(得分:1)

您传入size:的{​​{1}}是该字体的磅值

-[UIFont fontWithName:size:]返回的大小是字符串中布局字形的实际大小

如果您希望给定的字符串是特定的大小,在特定的面中,您可能需要进行牛顿方法类型的迭代,您可以在其中更改您传入的点大小,直到布局的大小关闭为止足够你想要的。 (在一般情况下,我不希望这样的操作很快,BTW。)它可能看起来像这样:

-[NSString sizeWithFont:constrainedToSize:lineBreakMode:]

PS: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); 在iOS7中已弃用。编译器告诉我改为使用-[NSString sizeWithFont:constrainedToSize:lineBreakMode:]。使用新推荐的方法,它可能如下所示:

-boundingRectWithSize:options:attributes:context:]

答案 1 :(得分:0)

尝试使用ceil确保舍入为整数:

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

答案 2 :(得分:0)

 CGSize viewwidth;
    viewwidth=[[UIScreen mainScreen] bounds].size;

这将帮助您使用cgsize获取设备当前分辨率。

viewwidth.width or viewwidth.height

如上所述你可以使用它。以及如下代码

rightslide=[[UIView alloc]initWithFrame:CGRectMake(0,0, viewwidth.width, viewwidth.height)];