두 개의 레이블이있는 사용자 정의 셀 클래스를 작성하면됩니다. 왼쪽 레이블에 너비 제약 조건 (셀의 왼쪽 가장자리와 중심 Y에 대한 제약 조건)을 지정하고 오른쪽 레이블에 왼쪽 레이블에 수평 간격 제한 조건을 지정합니다. IBOutlets를 두 개의 레이블로 만들고, 왼쪽 레이블의 너비 제약 조건에 하나도 지정합니다 (필자는 예제에서 widthCon이라고 부릅니다). 위 예제에서 두 레이블에 배경색을주었습니다. 그래서 너비를 볼 수있었습니다. viewDidLoad에서 가장 긴 문자열의 너비를 계산 한 다음 그 수를 사용하여 cellForRowAtIndexPath의 너비 제약 조건을 조정하십시오.
@interface TableController()
@property (strong,nonatomic) NSArray *theData;
@property (nonatomic) CGFloat maxWidth;
@end
@implementation TableController
- (void)viewDidLoad {
[super viewDidLoad];
self.theData = @[@"One",@"Two",@"Three Hundred Forty",@"Four",@"Five",@"Six",@"Seven",@"Eight",@"Nine"];
self.maxWidth = 0;
for (NSString *s in self.theData) {
CGSize stringSize = [s sizeWithFont:[UIFont systemFontOfSize:17]];
if (stringSize.width > self.maxWidth) self.maxWidth = stringSize.width;
}
[self.tableView reloadData];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.theData.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
RDCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
cell.widthCon.constant = self.maxWidth;
cell.leftLabel.text = self.theData[indexPath.row];
return cell;
}
1과 3은 어떻게 호환됩니까? 모든 라벨을 모든 셀에서 가장 긴 텍스트의 너비로 사용 하시겠습니까? 왼쪽 및 오른쪽 레이블도 같은 크기를 원한다는 것을 의미합니까? – rdelmar
@rdelmar 맞아. 모든 왼쪽 레이블에 가장 긴 텍스트의 너비가 있어야합니다. 내 유일한 생각은 테이블 외부에 숨겨진보기가 있고이보기의 너비 제약 조건 (코드)과 모든 셀의 왼쪽 레이블을 추가하는 것입니다. – Sulthan
3을 원하십니까? 하나의 행에 액세서리보기 또는 삭제 버튼이 필요한 경우와 같이 가장자리 케이스를 고려 했습니까? – Maarten