問題の画像を見ることで
これは、動的フレームを作成する方法です。これをUILabel
見てください。高さと幅を取得するUIlabel
ことで、全体の高さを計算し、行の高さを設定できます。UITableView.
- (void)setLabeltextWithVerticalAlignTop:(NSString *)theText
{
CGSize labelSize;
// here labelSize is hard-wired but could use constants to populate the size
labelSize = CGSizeMake(210, 129);//this is just for example
//now create the Size from textString SO that We could assign this size to the Label.
CGSize theStringSize = [theText sizeWithFont:lblTitle.font constrainedToSize:labelSize lineBreakMode:lblTitle.lineBreakMode];
lblTitle.frame = CGRectMake(lblTitle.frame.origin.x, lblTitle.frame.origin.y, theStringSize.width, theStringSize.height);
lblTitle.text = theText;
}
上記のメソッドの呼び出し 説明ラベルの高さと幅を設定するには、その説明ラベルに表示されるテキストを渡す必要があります。そのラベルの高さを取得すると、これに基づいてTableViewの行の高さを調整できます。
編集:上記のコードは、UILabel の動的フレームを作成するだけです
これはあなたが探しているものです....!!!.ここにサンプルコードもあります。
編集:質問を編集したので、ここにある実行可能なコードに変換する必要があるのはロジックだけです。
各行に対して呼び出されるコードで以下のメソッドを使用し、その中で計算を行います。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
CGFloat rowHeight=0.0;
//here it seems cell have 4 subview added on it.
//so if you could calculate the totla hieht of them.
//so what you really need to do.you just use hieght calculative Method for getting hieght of each of three UILabel
//you need to modify `setLabeltextWithVerticalAlignTop` method .
rowHeight= [self setLabeltextWithVerticalAlignTop:@"pass the correspondingText"];// suppose it returns some hieght for FisrtLabel.
//suppoose here you get the 20.0 height here
rowHeight= rowHeight+[self setLabeltextWithVerticalAlignTop:@"pass the correspondingText"];
// secondUIlabel の高さを返すとします。
//suppoose here you get the 40.0 height here
rowHeight= rowHeight+ [self setLabeltextWithVerticalAlignTop:@"pass the correspondingText"];
// suppose it returns some hieght for ThirdUIlabel.
// suppoose here you get the 15.0 height here
//here you have totla height you just need to add some gapping floating value for all of three UIlabel.so that the could not overlap like as.
rowHeight= rowHeight+20.0;
//now you can return that total height
return rowHeight;
}
注:これは、実行可能なコードに変換するために必要な単なるロジックです。これが役立つと確信しています。
お役に立てば幸いです。