아이폰 뿐만 아니라 다른 코딩을 하더라도 컨텐츠 내용에 따라서 높이를 가변으로 설정해야 하는 경우가 간혹 생깁니다.
그렇게 되면 기본적으로 생각하는 문제가 "가로사이즈에 총 몇개의 글자가 들어가며 한글자의 높이는 얼마나 되는가" 입니다.
뭐 자주 쓰이지 않는 부분이라면 하드코딩으로 구현하면 되지만, 은근히 진짜 많이 쓰이게 됩니다.
그리하여 저는 따로 클래스에 메소드를 하나 만들어놓고 메소드 파라미터에다가 Font & FontSize 정보와 컨텐츠를 넣으려는
공간의 넓이, 높이의 최대값, 컨텐츠 내용을 던져줍니다.
그러면 만들어놓은 메소드에서 계산을 하여 Height값인 높이를 리턴(Return)시켜 주게 됩니다.
+ (CGSize)dataSize:(NSString *)string withContentSize:(CGSize)size font:(UIFont *)font { CGSize maxSize = CGSizeMake(size.width, 1000); // 1000은 최대 높이를 말합니다. 1000을 초과하게 되면 스크롤이 생겨버립니다. CGSize dataHeight = [string sizeWithFont:font constrainedToSize:maxSize lineBreakMode:UILineBreakModeCharacterWrap]; CGSize resultSize = CGSizeMake(dataHeight.width, dataHeight.height+30); // dataHeight.height에 30을 더해준 이유는 상황에 따라 길이가 살짝 짧게 나올 수도 있기 때문에 // 여유길이 30픽셀을 추가합니다. // 상황에따라 더한 숫자를 없애주거나 더 많이 줘도 관계없습니다. return resultSize; }
위와 같이 클래스 메소드로 활용하여 사용합니다.
어짜피 높이값만 알아내면 되기때문에 구지 인스턴스로 만들 필요가 없으니깐요^.^
+ (CGSize)dataSize:(NSString *)string withContentSize:(CGSize)size font:(UIFont *)font;
위 선언한 메소드에 대해서 자세히 설명하겠습니다.
1. 클래스 메소드이기때문에 맨 앞에 +를 붙였습니다.
2. 반환값(Return)은 CGSize로 넘겨줍니다. (CGSize는 Width 와 Height를 가지고 있습니다)
3. 총 3개의 파라미터(매개변수)를 넘겨줘야합니다. ( (NSString *)string, (CGSize)size, (UIFont *)font
- (NSString *)string : 화면에 띄울 컨텐츠의 내용을 전달합니다.
- (CGSize *)size : 내가 넣을 공간의 사이즈를 전달합니다. (size로 받아왔지만 실제로는 width값만 사용하게 됩니다.)
- (UIFont *)font : 해당 화면(예:UITextView)에서 사용하고 있는 font값을 전달합니다.
4. 반환(Return)받은 Height값을 이용하여 해당 화면 Height에 적용을 시킵니다.
사용방법 끝!
하면서 궁금한 사항이 생긴다면 댓글을 달아주세요.
반응이 좋다면 샘플프로젝트 만들어서 제공하도록 하겠습니다 ^.^
아이폰 개발자등록방법 (개인사업자용) (1) (8) | 2012.08.23 |
---|---|
아이폰 채팅 TableView Library (2) | 2012.08.19 |
View & imgView Animation Effect (0) | 2012.01.02 |
댓글 영역