NSAttributedStringsを使用してUITableViewCellのUITextViewsから一貫した結果を取得するのに問題があります。
内部-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
headerText = [[UITextView alloc]initWithFrame:CGRectZero];
[headerText setUserInteractionEnabled:NO];
headerText.tag = HEADER_TEXT;
[cell.contentView addSubview:headerText];
} else {
headerText = (UITextView*)[cell.contentView viewWithTag:HEADER_TEXT];
}
//...setting up attributed strings
[headerText setAttributedText:headerString];
CGSize headerSize = [headerText sizeThatFits:CGSizeMake(246, CGFLOAT_MAX)];
headerText.frame = CGRectMake(45, 8, headerSize.width, headerSize.height);
結果:
ご覧のとおり、最初の2つは、私が期待/希望する方法でテキストを描画しているように見えます。最後の2つでは、UITextView sizeThatFitsメソッドは、テキストを描画するために必要なサイズよりもはるかに大きいサイズを返し、テキストはフレームの上部に密着するのではなく、フレームの中央に配置されます。uitextviewフレームの高さに基づいて他のビューをレイアウトできるようにしたいので、これは問題です。
フレームからスクロールして戻った後:
セルが再利用され、属性付きの文字列が再び設定されると、さらに奇妙になります。uitextviewは、一貫性のない方法でテキストを描画します。
contentInsetsをに設定することも
headerText.contentInset = UIEdgeInsetsMake(-8, -8, -8, -8);
一貫性のある結果は提供されません。
そして、contentinsetを設定してスクロールした後:
UITextViewに、必要な動作を取得できる他の属性はありますか?