表示されているテキストに応じて、UITableViewCellの高さのサイズを変更しようとしています。テキストを完全に表示したい。
cellForRowAtIndexPathに、特定のTEXT_CELLラベルを持つセルを作成します
if ([rowType isEqualToString:kTextCell] ) {
cell = [[[MyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease];
// Create a text view;
UITextView *newText = [[UITextView alloc] initWithFrame:CGRectZero];
newText.backgroundColor = [UIColor blueColor];
newText.tag = kNotesTag;
newText.editable = NO;
newText.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
cell.contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[cell.contentView addSubview:newText];
[newText release];
}
そして、セルを表示するとき、sizeOfFont関数を使用してすべてのテキストを表示するために必要なサイズを計算します。次に、そのサイズを変数として設定します。これは、heightOfCell関数で使用されます。
UITextView *notes = (UITextView*) [cell viewWithTag:kNotesTag];
if (notes != nil) {
notes.text = [self.managedObject dispalyValueForKeyPath:rowKey];
// resize it to the right height
CGRect contentFrame = cell.contentView.frame;
CGSize textSize = [notes.text sizeWithFont:[UIFont systemFontOfSize:[UIFont systemFontSize]]
constrainedToSize:CGSizeMake(contentFrame.size.width, CGFLOAT_MAX)
lineBreakMode:UILineBreakModeWordWrap];
CGFloat newHeight = textSize.height + (CELL_CONTENT_MARGIN*2); //some space at the bottom
CGFloat textHeight = self.storedTextHeight;
if (textHeight != newHeight) {
[notes setFrame:CGRectMake(contentFrame.origin.x,
CELL_CONTENT_MARGIN+contentFrame.origin.y,
contentFrame.size.width, newHeight)];
self.storedTextHeight = newHeight;
// we reset the height fo the row, so reload it
[tView beginUpdates];
[tView endUpdates];
}
計算は期待どおりに機能し、heightForRowが呼び出され、セルの高さが更新されます。ただし、常に[tViewendUpdates]行でSIGABTを取得します。
エラーメッセージは以下のとおりです。私はたくさんグーグルで検索しましたが、なぜそうなるのかはっきりしていません。セルを作成または追加しません。
*キャッチされなかった例外によるアプリの終了'NSInternalInconsistencyException'、理由:'無効な更新:セクション0の行数が無効です。更新後の既存のセクションに含まれる行数(1)は、に含まれる行数と同じである必要があります更新前のそのセクション(2)、そのセクションから挿入または削除された行の数(0が挿入、0が削除)、およびプラスまたはマイナスがそのセクションに出入りした行の数(0が入、0)引っ越した)。'
これについての洞察に感謝します。