Interface Builder で自動レイアウト制約が適用されたカスタムUITableViewCell
サブクラスがあります。セルには、 を含む複数のビューが含まれていますUITextField
。
関連して、 のサイズは、UITextField
それと次のビューの間にデフォルトの水平方向のスペースがあるように制限されています。
セルは次のようにインスタンス化されます。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"ProgressCell";
ProgressCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier
forIndexPath:indexPath]
cell.textField.text = @"Some string that is different for each cell";
return cell;
}
セルが最初に表示されるとき、UITextField
は正しいフレームをオーバーランし、 の後ろのUIView
右側に表示されます。ただし、セルを画面外にスクロールし、一時停止してから戻ると、テキストが正しく切り捨てられます。
以下に例を示します (2 回目の編集時)。
[cell setNeedsLayout]
と[cell setNeedsDisplay]
のセルを呼び出してみcellForRowAtIndexPath
ましたが、遅れて実行しました。どちらも効果的ではありません。
セルが正しく表示される原因となっている画面外へのスクロールは何ですか?また、これを再現するか、根本的な問題を修正するにはどうすればよいですか?
編集:
通話中
[self.tableView reloadData];
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationAutomatic];
セルをリロードするために、レイアウトが最初に正しく表示されるように見えます。
ただし、スクロールすると (時折)中断するようになりました (つまり、上にスクロールすると、レイアウトの制約が正しく適用されません)。
電話[cell setNeedsLayout]
をかけても、cellForRowAtIndexPath
この問題は解決しないようです。
EDIT2:
画面を下にスクロールするまで、ここに示すように、一番上のセルが (一番下のセルと同様に) 正しく表示されました。それ以来、それは消えました。
これは、最初の編集時点での問題を反映しています。問題は 2 番目のレンダリングです (セルの再利用と関係があるのではないかと思います)。