簡體   English   中英

iOS 7為我提供了不同的CGSize寬度和高度

[英]iOS 7 gets me a different CGSize width and height

我在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天沒有解決方案,請幫忙,謝謝!

size:你傳遞給-[UIFont fontWithName:size:]是字體的點數大小

從中獲取的大小-[NSString sizeWithFont:constrainedToSize:lineBreakMode:]是字符串中布局的字形實際大小

如果您希望給定的字符串是特定的大小,在特定的面中,您可能必須進行牛頓方法類型的迭代,您可以在其中更改您傳入的點大小,直到布局的大小足夠接近你要。 (在一般情況下,我不希望這樣的操作很快,BTW。)它可能看起來像這樣:

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中不推薦使用-[NSString sizeWithFont:constrainedToSize:lineBreakMode:] 編譯器告訴我使用-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);

嘗試使用ceil確保舍入到整數:

_rtLabelQuestion.frame = CGRectMake(aLabelTemp.frame.origin.x, aLabelTemp.frame.origin.y, ceil(size.width) + 2 , ceil(size.height) + 10);
 CGSize viewwidth;
    viewwidth=[[UIScreen mainScreen] bounds].size;

這將幫助您使用cgsize獲取設備當前分辨率。

viewwidth.width or viewwidth.height

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM