2011-02-05 4 views
5

배경색을 나타내는 텍스트 주위에 여백을 남기려면 UILabel에서 텍스트를 들여 쓰려고합니다. 제안 here 다음 나는과 같이 textRectForBounds:limitedToNumberOfLines:를 오버라이드 (override) 한 :UILabel textRectForBounds는 여백을 만들 때 아무 효과가 없습니다.

- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines 
{ 
    CGRect intermediate = CGRectMake(bounds.origin.x+MARGIN,bounds.origin.y+MARGIN,bounds.size.width-2*MARGIN,bounds.size.height-2*MARGIN); 
    return [super textRectForBounds:intermediate limitedToNumberOfLines:numberOfLines]; 
} 

는하지만 무슨 상관없이 텍스트가 사각형의 왼쪽 테두리에 꽉 끝납니다. 드로잉은 반환 된 CGRect의 원점 부분을 무시하는 것처럼 보입니다 (비록 width 부분을 존중하는 것처럼 보이지만, 예를 들어 bounds.size.width-200의 중간 너비로 축소하는 것처럼 textRectForBounds가 반환하는 rect는 적당히 좁고 텍스트는 그려집니다. 긴 마른 칼럼에).

그렇다면 UILabel으로해야 할 일이 textForRectBounds- 돌아가는 rect의 origin.x와 origin.y를 존중하도록하려면 어떻게해야합니까? 차라리 도움이된다면 UILabeldrawTextInRect을 덮어 쓰지 않을 것입니다.

업데이트 : 이것은 오래전 일이었습니다. 다른 질문이 저에게 효과적이지 않은 이유를 정확히 기억하지 못합니다. 여러 줄의 UILabel을 가지고 있기 때문에 그랬다고 믿습니다. 그럴 경우 here 솔루션이 작동하지 않습니다.

+0

직접 '중간'을 반환 해 보셨습니까? –

+0

예.하지만 차이는 없습니다. – damian

답변

8

나는이 같은 두 textRectForBounds:limitedToNumberOfLines:drawTextInRect: 오버라이드 (override) 할 필요가 생각 :

- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines 
{ 
    return CGRectInset(bounds, MARGIN, MARGIN); 
} 

- (void)drawTextInRect:(CGRect)rect 
{ 
    [super drawTextInRect: CGRectInset(self.bounds, MARGIN, MARGIN)]; 
} 
+0

고마워,이 일을 (더 또는 덜) : 여러 줄 제대로 일을 만들기 위해 rect 너비를 조정해야 할 몇 가지 일을했지만 결국 그것을 작동 시키십시오. – damian

+0

UITextView와 일치 시키려면 다음과 같이 sizeThatFits를 재정의해야 할 수도 있습니다. - (CGSize) sizeThatFits : (CGSize) size { CGSize fSize = [super sizeThatFits : size]; fSize.width + = 2 * MARGIN; fSIze.height + = 2 * MARGIN; return fSize; } –

+1

나를 위해 작동하지 않지만 여전히 호출되지 않습니다. –

0

확인 문서, 그것은 어떤 도움이 될 수 있습니다. super 호출은 여러분이 가정 한 값을 반환하지 않을 수도 있습니다.

이 메서드는 이라고 직접 부르면 안됩니다. 이 메서드는 다른 계산을 수행하기 전에 수신기의 바운딩을 사각형으로 변경하려는 하위 클래스에 의해 재정의 된 이어야합니다. numberOfLines 매개 변수의 값을 사용하여 반환 된 사각형의 높이 인 을 지정된 줄 수인 개로 제한하십시오. 이 메서드를 호출하려면 이 sizeToFit 또는 sizeThatFits : 메서드를 호출해야합니다. 있는 UITableViewCell 객체에 레이블 가 원래 경계 사각형을 반환하는 요청 된 크기 이 메소드의 디폴트 구현 셀 크기, 에하지 기반으로 크기 유의하십시오.

행운을 빌어 요!

+0

사실, 문서는'limitedToNumberOfLines : 0'과 함께 부정확합니다. 'bounds '에 전달 된 것은'INT_MAX_VALUE' 또는 뭔가와 같은'height'를 가지며 기본 구현은 텍스트를 맞추기에 충분히 높은 rect로 줄이는 것으로 보입니다. – damian

관련 문제