![](/img/trans.png)
[英]sizeWithAttributes gets me a different CGSize width and height
[英]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.