3

我在 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 天但没有解决方案,请帮助,谢谢!

4

3 回答 3

1

size:您传入的是-[UIFont fontWithName: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);
于 2013-09-19T13:00:54.730 回答
0

尝试使用 ceil 以确保您四舍五入为整数:

_rtLabelQuestion.frame = CGRectMake(aLabelTemp.frame.origin.x, aLabelTemp.frame.origin.y, ceil(size.width) + 2 , ceil(size.height) + 10);
于 2013-12-12T06:02:52.613 回答
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)];
于 2015-05-18T09:34:22.550 回答