2009-11-09 5 views
4

내가 애플의 워드 프로세서로 정의 UITableViewCellStyleValue1를 사용하여있는 UITableViewCell을 만들었습니다UITableViewCell - 오른쪽 UILabel 왼쪽 만드는 대신 잘리는 방법?

정렬 왼쪽 및 검정 텍스트와 셀의 왼쪽에 레이블이있는 셀의 스타일; 오른쪽에 작은 파란색 텍스트가 있고 오른쪽으로 정렬 된 레이블이 있습니다. 설정 응용 프로그램은이 스타일의 셀을 사용합니다.

왼쪽에 짧은 텍스트를, 오른쪽에 긴 텍스트를 표시하도록 셀 텍스트를 설정하려고합니다.

URL http://www.mylongurl.com/subdirectory/etc

내 문제는로 표시되도록 왼쪽 UILabel의 대신 오른쪽에 하나의 잘립니다 것입니다 :

U를 ... http://www.mylongurl.com/subdirectory/etc

URL을 더 길게 만들면 레이블이 모두 잘립니다.

U ...

http://www.mylongurl.com...subdirectory/etc 사용자 지정있는 UITableViewCell을 사용하지 않고 왼쪽으로 한 대신 잘라 UILabel의 권리를 만들 수있는 방법이 있습니까? 사용자 정의 UITableViewCell을 만드는 방법을 알고 있지만 과도한 것처럼 보입니까?

UILabel 내에서 텍스트가 잘리는 위치를 변경하기 위해 UILineBreakMode를 설정할 수 있지만 detailTextLabel이 textLabel 자체를 표시 할 수 있도록 너비를 조정하는 방법을 볼 수 없습니다. 당신이 init 여기에 가지고있는 것처럼

[[lCell textLabel] setText:@"URL"]; 
[[lCell detailTextLabel] setText:@"http://www.mylongurl.com/subdirectory/etc"]; 
[[lCell detailTextLabel] setLineBreakMode:UILineBreakModeMiddleTruncation]; 

답변

3

몇 가지 옵션이 있습니다.

아마 당신이 묻고있는 것처럼 가장 가까운 것은 UITableViewDelegatetableView:willDisplayCell:forRowAtIndexPath:에있는 라벨 프레임으로 주위를 둘러 보는 것입니다. ('UITableViewCells 이후 tableView:cellForRowAtIndexPath: 결국 자신의 내부 레이아웃 작업을 수행의 tableView:cellForRowAtIndexPath: 비행하지 않습니다. 당신은 NSString 사용할 수 있습니다 UITableViewDataSource가에서 셀 레이아웃 수정을하는)'s의 - 당신의 textLabel의 레이아웃 요구 사항을 파악하기 위해 sizeWithFont:을.

UITableViewCell 하위 클래스로 지정하거나 cell.textLabel.adjustsFontSizeToFitWidth = YES으로 설정하는 것과 같이 위에서 언급 한 것처럼 다른 방법을 사용할 수도 있습니다.

+0

결국 나는 당신이 제안한 것과 아주 비슷한 것을했습니다. UITableViewCell setNumberOfLines : 0을 설정하고 tableView의 UITableViewCell 높이를 조정합니다. heightForRowAtIndexPath : indexPath NSString sizeWithFont : constrainedToSize : lineBreakMode를 사용하여 적절한 높이를 계산합니다. 이 작업을 수행하는 더 쉬운 방법이 없다는 것은 놀라운 일입니다! –

+0

그래; 나는 테이블 뷰 셀을 쓰는 데 많은 시간을 할애한다. 하지만 일반 레이아웃 시스템과 성능 사이에는 절충점이 있으며 UITableViewCells는 리소스가 제한된 장치의 성능 핫스팟이므로 API/지원 매트릭스를 간략하게 유지하는 것이 어느 정도는 이해할 수 있습니다. –

3

가장 좋은 방법은 jQuery과 셀의 서브 클래스를 생성하고 레이블 사용자 지정을 설정하는 것입니다. 왼쪽 레이블을 더 넓게하려면 레이블 layoutSubviews을 재정의하고 레이블의 크기를 조정해야합니다.

- (void)layoutSubviews { 
    [super layoutSubviews]; 
    self.textLabel.frame = CGRectMake(0.0, 0.0, 100.0, self.frame.size.height); 
    self.detailTextLabel.frame = CGRectMake(0.0, 0.0, 220.0, self.frame.size.height); 
} 

분명히 이들은 임의의 값입니다. 당신은 당신의 필요를 충족시키기 위해 다양한 크기로 놀고 싶어 할 것입니다.

+0

응답 주셔서 감사하지만, 나는 구체적으로 UITableViewCell을 서브 클래 싱하는 방법을 알고 있다고 말했지만보다 간단한 해결책을 원했습니다! –

+1

Dan, 서브 클래 싱은 전혀 복잡하지 않습니다. 서브 클래 싱하는 것이 좋습니다. cellForRow 메서드의 모든 옵션을 설정하는 것은 하위 클래스에서 사용자 지정을 수행하는 것보다 훨씬 느립니다. –

관련 문제