各フィールドのテキストの長さに応じて高さが動的に変化する字幕スタイルのUITableViewCellがあります。問題は、ラベルに複数の行がある場合、textLabelの高さ(CGSizeサイズ)が増加しないことです。
奇妙な部分は、detailTextLabelの高さが必要に応じて増加していることです(CGSizesize2)。両方の高さを計算するコードは同じです。
これが私の関数です:
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
SETLISTFMNS0Song *song = [[[selectedSetlist.sets objectAtIndex:indexPath.section] songs]objectAtIndex:indexPath.row];
CGSize size = [song.name sizeWithFont:[UIFont fontWithName:setlistFont size:labelFontSize] constrainedToSize:CGSizeMake(self.setsTable.bounds.size.width, CGFLOAT_MAX)];
NSLog(@"Label: \"%@\" \tLabel Size: %f W %f H", song.name, size.width, size.height);
NSMutableString *detail;
if ([song cover]) {
detail = [[NSMutableString alloc] initWithFormat:@"(%@ cover)", [[song cover] name]];
}
if ([song with]) {
if (!detail) {
detail = [[NSMutableString alloc] initWithFormat:@"(with %@)", [[song with] name]];
}
else {
[detail appendFormat:@" (with %@)", [[song with] name]];
}
}
if ([song info]) {
if (!detail) {
detail = [[NSMutableString alloc] initWithFormat:@"(%@)", [song info]];
}
else {
[detail appendFormat:@" (%@)", [song info]];
}
}
if (detail.length != 0) {
CGSize size2 = [detail sizeWithFont:[UIFont fontWithName:setlistFont size:detailFontSize] constrainedToSize:CGSizeMake(self.setsTable.bounds.size.width, CGFLOAT_MAX)];
size.height += size2.height;
NSLog(@"Detail Label: \"%@\" \tDetail Label Size: %f W %f H", detail, size2.width, size2.height);
}
return size.height + 5;
}
また、cellForRowAtIndexPathで両方のtextLabelのnumberOfLinesプロパティを0に設定して、複数の行をサポートしています。
cell.textLabel.numberOfLines = 0;
cell.detailTextLabel.numberOfLines = 0;
更新: @joshのおかげで、なぜこれが起こっているのか理解できました。幅の制約をUITableViewの幅に設定しました。これは幅が広すぎます。UILabelを作成する前に幅を見つける方法を知っている人はいますか?HA!
ありがとう!