2011-12-02 3 views
9

나는 lineBreakMode이 설정된 UILabel이 UILineBreakModeWordWrap입니다. 공백이없는 긴 텍스트 조각이있는 경우를 제외하고는 정상적으로 작동합니다. 이 경우 텍스트의 긴 슬랩을 감싸지 않고 대신 UILabel 프레임의 오른쪽 끝에 도달하면 잘라냅니다. 이 상황에서 문자 경계에 포장해야한다고 UILabel에게 말할 수 있습니까? (기본적으로 UILineBreakModeCharacterWrap 설정과 동일하지만 길이가없는 텍스트의 긴 슬라브에만 해당).UILabel 워드 랩/문자 랩

미리 감사드립니다. 당신은 스스로를해야 할

+1

나 같은 독창적 인 독자를위한 노트 : iOS 7 및 SDK 8로 테스트 한 UILineBreakModeWordWrap은 현재와 같은 방식으로 작동합니다.즉, 가능한 경우 단어로 분리되지만 필요하면 문자로 분리됩니다. 이것은 UILabel의 경우입니다. – eselk

답변

0

은, '나는 당신을 원하지 않는 경우를 제외하고 사용 바꿈'에 대한 옵션이 없습니다 :

단어는 당신이 전에로 공백을 삽입 할 수 너무 긴 경우 레이블을 표시하여 포장 위치를 ​​알 수 있도록 도와줍니다.

3

이렇게하는 한 가지 방법은 IB에서 Lines 속성을 설정하는 것입니다. 많은 라인이 점유까지 텍스트가 랩 3대로 행의 수를 설정할 때 그래서

textLabel.lineBreakMode = UILineBreakModeWordWrap; 
textLabel.numberOfLines = 3; 

-

enter image description here

또는 코드에서

이 작업을 수행.

+1

OP는 단어를 여러 줄로 묶어도 한 단어 (예 : 'Llanfairpwllgwyngyllgogerychwyrndrobwllllllysysogogogoch')가 텍스트 상자보다 넓은 경우 줄 바꿈하지 않는 '줄 바꿈'을 구체적으로 원합니다. :) – deanWombourne

0

딘이 맞습니다. 원한다면 수동으로해야합니다. 아래에 공백이 없더라도 레이블에 단어를 래핑합니다. 이것은 다른 사람이이 같은 문제가 발생 들어

  NSString *someText = yourLabel.text; 

    //Check if the text contains spaces  
//The method in the below if condition is user defined and you have to define one. lol 
     if(![self textContainsSpaces:someText]) 
     { 
     //Do the word wrap manually 
      CGSize constraintSize; 

      constraintSize.width = 165; 

      constraintSize.height = 165; 

      CGSize stringSize =[someText sizeWithFont: [UIFont boldSystemFontOfSize: 17] constrainedToSize: constraintSize lineBreakMode: UILineBreakModeWordWrap]; 

      CGRect rect = CGRectMake(yourLabel.frame.origin.x, yourLabel.frame.origin.y, 165, (stringSize.height+10)); 

      yourLabel.frame = rect; 
     } 
9

도움이 될 수 있습니다, 나는 종료 업 UILabel 대신 UITextView를 사용하여 해결.

  1. 그것은 텍스트에 공백이 포함되어 있는지 여부를 확인하고 단어/문자 랩에서 /에 UILabel의 줄 바꿈 모드를 변경하려면 사용자 정의 동작을 필요로하지 않는다 : 이것은 두 가지 이유에 대한 최상의 솔루션이다.

  2. 더 중요한 것은 정상적인 단어 (단어 경계를 감싸고 자하는)와 여분의 긴 텍스트 (문자 경계를 감쌀 필요가 있음)가있을 수 있다는 것입니다. 상황에 따라 단어와 문자의 배치를 처리하는 방법을 볼 수없는 "위조 된 단어 감싸기"를 강요하기 위해 올바른 위치에 추가 긴 텍스트에 공백을 삽입하는 논리를 작성하는 것의 부족, 하나 안에 UILabel. UITextView은이 상황을 자동으로 처리하여 필요에 따라 단어 경계 나 문자 경계를 깨뜨립니다.

내가 어떻게하는지에 대한 자세한 내용은 편집 및 스크롤이 비활성화 된 한 줄의 UITextView이 있습니다. 또한 .contentInset을 설정하여 패딩을 제거하여 UILabel처럼 보이게 만듭니다 (예기치 않은 눈으로 보임). 그런 다음 sizeWithFont:constrainedToSize:lineBreakMode: 메서드를 사용하여 렌더링 된 텍스트의 프레임을 결정하고 그에 맞게 정확히 UITextView의 프레임을 조정합니다.

희망이 도움이됩니다!