반응형
iOS7 으로 버전을 변경하여 빌드를 해보면 sizeWithFont:constrainedToSize:lineBreakMode 로 계산한 값들이 정확하지 않다는 것을 알 수 있다.
구글신의 도움으로 다음과 같은 방법으로 해결하였습니다.
아래 코드는 UILabel의 Category로 구현된 내용입니다.
- (CGSize)boundingSize:(CGSize)size { CGSize resultSize; #ifdef __IPHONE_7_0 if ([self.text respondsToSelector:@selector(boundingRectWithSize:options:context:)]) { resultSize = [self.text boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:self.font} context:nil].size; } else { # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wdeprecated-declarations" resultSize = [self.text sizeWithFont:self.font constrainedToSize:size lineBreakMode:NSLineBreakByWordWrapping]; # pragma clang diagnostic pop } #else # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wdeprecated-declarations" resultSize = [self.text sizeWithFont:self.font constrainedToSize:size lineBreakMode:NSLineBreakByWordWrapping]; # pragma clang diagnostic pop #endif resultSize.width = ceil(resultSize.width); resultSize.height = ceil(resultSize.height); return resultSize; }
NSString Category 구현
NSString+Size.h
#import@interface NSString (Size) - (CGSize)boundingSize:(CGSize)size font:(UIFont*)font; @end
NSString+Size.m
#import "NSString+Size.h" @implementation NSString (Size) - (CGSize)boundingSize:(CGSize)size font:(UIFont*)font { CGSize resultSize; #ifdef __IPHONE_7_0 if ([self respondsToSelector:@selector(boundingRectWithSize:options:context:)]) { resultSize = [self boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:font} context:nil].size; } else { # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wdeprecated-declarations" resultSize = [self sizeWithFont:font constrainedToSize:size lineBreakMode:NSLineBreakByWordWrapping]; # pragma clang diagnostic pop } #else # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wdeprecated-declarations" resultSize = [self sizeWithFont:font constrainedToSize:size lineBreakMode:NSLineBreakByWordWrapping]; # pragma clang diagnostic pop #endif resultSize.width = ceil(resultSize.width); resultSize.height = ceil(resultSize.height); return resultSize; } @end
반응형
'Programming > iOS' 카테고리의 다른 글
URL scheme for KakaoOpenSDK is not set properly in plist. (0) | 2014.02.08 |
---|---|
Xcode Bots 적용 (0) | 2014.02.06 |
[iOS7] statusBar style 변경 (0) | 2013.11.25 |
푸시 알리 지우기 (1) | 2013.11.07 |
Xcode5 NavigationBar 밑에 View가 있는 문제 (0) | 2013.10.14 |