¿Cómo calcular el cuadro delimitador de una cadena de CATextLayer?

A primera vista mi pregunta se ve muy simple, pero parece que realmente no puedo encontrar una solución. Esto es lo que es: quiero calcular el cuadro delimitador de la cadena de un CATextLayer. Esto es lo que hago:

CATextLayer *textLayer = [CATextLayer layer]; textLayer.frame = CGRectMake(80, 0.0f, 36.0f, 18.0f); textLayer.string = @"12"; textLayer.fontSize = [UIFont systemFontSize]; textLayer.foregroundColor = [UIColor whiteColor].CGColor; NSLog(@"(width,height)=(%f,%f)", [textLayer.string sizeWithFont:textLayer.font].width, [textLayer.string sizeWithFont:textLayer.font].height); 

El problema es que la salida es siempre: (ancho, alto) = (8.000000,0.000000)

Use sizeWithFont:constrainedToSize:lineBreakMode:

 [someString sizeWithFont:yourFont constrainedToSize:CGSizeMake(maxWidthYouSpecify, CGFLOAT_MAX) lineBreakMode:UILineBreakModeWordWrap]; 

A partir de iOS 7, use el NSString boundingRectWithSize: options: attributes: context de NSString . sizeWithFont: constrainedToSize: lineBreakMode: ahora está en desuso.

 CGRect rect = [textLayer.string boundingRectWithSize:textLayer.frame.size options:NSStringDrawingUsesLineFragmentOrigin attributes:nil context:nil]; CGSize size = CGSizeMake(ceilf(rect.size.width), ceilf(rect.size.height)); 

// use la function a continuación para CATextLayer dynamic

 func DynamicLableWidth(reason:NSString,cpT:CGPoint,width:CGFloat,reasonLayer:CATextLayer) { //Dynamic CATextLayer with boundingRect let font = UIFont(name: "Arial", size: 20)! let attributes: [NSString : AnyObject] = [NSFontAttributeName: font] var rect:CGRect = reason.boundingRectWithSize(reasonLayer.frame.size, options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: attributes, context: nil) var size:CGSize = CGSizeMake(rect.size.width, rect.size.height); if cpT.x+20+ceil(size.width)+20>width { reasonLayer.frame = CGRectMake(cpT.x-20-ceil(size.width)+20, cpT.y-15, ceil(size.width)+20, 20) } else { reasonLayer.frame = CGRectMake(cpT.x+20, cpT.y-15, rect.size.width+20, 20) } }