상세 컨텐츠

본문 제목

[iOS] 글자수에 따라 높이 가변길이 조절

프로그래밍/모바일관련

by jin* 2013. 2. 13. 10:09

본문





아이폰 뿐만 아니라 다른 코딩을 하더라도 컨텐츠 내용에 따라서 높이를 가변으로 설정해야 하는 경우가 간혹 생깁니다.


그렇게 되면 기본적으로 생각하는 문제가 "가로사이즈에 총 몇개의 글자가 들어가며 한글자의 높이는 얼마나 되는가" 입니다.


뭐 자주 쓰이지 않는 부분이라면 하드코딩으로 구현하면 되지만, 은근히 진짜 많이 쓰이게 됩니다.


그리하여 저는 따로 클래스에 메소드를 하나 만들어놓고 메소드 파라미터에다가 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에 적용을 시킵니다.



사용방법 끝!





하면서 궁금한 사항이 생긴다면 댓글을 달아주세요.


반응이 좋다면 샘플프로젝트 만들어서 제공하도록 하겠습니다 ^.^









관련글 더보기

댓글 영역