NSAttributedStringsを使用してUITableViewCellのUITextViewsから一貫した結果を得ることができません。UITableViewCellのUITextViewでNSAttributedStringを一貫して描画する方法
インサイド - (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はテキストを矛盾した方法で描画します。
そしてcontentinsetセットをスクロールした後:
でも
headerText.contentInset = UIEdgeInsetsMake(-8, -8, -8, -8);
にcontentInsetsを設定すると、一貫性のある結果の任意の並べ替えを提供していません
は、他のありますUITextViewの属性を使用すると、動作を取得できます私が必要とする?
私はUITextInputプロトコルを実装しているため、UITextViewを使用しています。これにより、テキストの特定の部分文字列にボタンを作成することができます。私はテキストを直接描くことが好ましいだろうと認めます。それを達成するためにiOSライブラリを調べる必要がありますか?質問に答えてくれてありがとう。 –
テキストを描画するのに "ライブラリ"は必要ありません。それはUIKitの一部です。 – matt
私はCoreTextを使用して、タッチが与えられた行またはテキストの行の上に来たかどうかを判断する必要があるかもしれないと思う。 –