2014년 5월 22일 목요일

[iOS] sizeWithFont를 대체하는 함수 사용법

iOS7이전에는 NSString이 특정 가로 크기에서 줄바꿈 등을 통해서, 높이가 얼마나 되는지 알아보기 위해서는 sizeWithFont:constrainedToSize를 사용하였는데, 7.0에서는 Deprecated가 되어서 변경해야 합니다.
iOS7에서는 font뿐만 아니라, 다른 Attribute들도 높이를 구할 때 필요하므로 font만 참고하는 것이 아니라, attributes라고 NSDictionary를 받아서 구하게 됩니다.

sizeWithFont:constrainedToSize (Deprecated)
    //특정 영역 (268, 4000)의 크기에서 myString에 있는 글의 높이를 iOS6에서 구하는 방법
    UIFont *font = [UIFont fontWithName:@"HelveticaNeue-Light" size:10];
    CGSize aboutSize = [myString sizeWithFont:font constrainedToSize:CGSizeMake(268, 4000)];


Xcode5에서는 boundingRectWithSize:options:attributes:context:를 사용하라고 나옵니다.

    //폰트가 따로 정리가 되어 있지 않는 경우는
    UIFont *font = [UIFont fontWithName:@"HelveticaNeue-Light" size:10];
    CGRect aboutRect = [myString //높이를 구할 NSString 
                          boundingRectWithSize:CGSizeMake(268, CGFLOAT_MAX) 
                                       options:NSStringDrawingUsesLineFragmentOrigin 
                                    attributes:@{NSFontAttributeName:font} 
                                       context:nil];

만약 일반 NSString이 아니고, NSAttributedString을 사용하고 있으면, attributes가 없는 함수를 사용하면 됩니다.

    //폰트가 따로 정리가 되어 있지 않는 경우는
    UIFont *font = [UIFont fontWithName:@"HelveticaNeue-Light" size:10];
    NSAttributedString *myAttributedString = [[NSAttributedString alloc] initWithString:myString
               
    CGRect aboutRect = [myAttributedString //높이를 구할 NSAttributedString
                         boundingRectWithSize:CGSizeMake(268, CGFLOAT_MAX) 
                                      options:NSStringDrawingUsesLineFragmentOrigin
                                      context:nil];                                                              

정리해 둡니다.