2016-10-25 8 views
1

私は適切にtableviewcellの制約を更新するのだろうか?適切なアップデート方法をスウィフトUITableViewCellの制約

私のアプリでは、ユーザーがiphone 6/7またはiphone 6/7 Plusを使用していて、いくつかの制約を変更する必要があるかどうかを確認しています。

class MyTableViewCell: UITableViewCell { 

} 

は、私がprepareForReuse()で、または別の方法で制約を変更する必要があります。

私はこのようなのUITableViewCellのサブクラスを作っていますか? prepareForReuseについてのドキュメントから

override func prepareForReuse() { 
     super.prepareForReuse() 
     myConstraint.constant = someNewVal 
    } 
+0

あなたの投稿はあなたが達成しようとしていることはあまり明確ではありません。制約を変更したい場合は、6/7 +他のモデルについてどうやっているのですか。コンテンツサイズをすべてのデバイスに合わせたい場合は、別のアプローチが必要です。http://stackoverflow.com/questions/40216729/auto-調整 - カスタム - uitableviewセルとラベル - それは - テキストにテキスト/ 40221431#40221431 – Joe

+0

@ジョー私の悪い答えに申し訳ありません。私は自分のtableviewCellのためのいくつかの制約設定を持っていると私はどのようなメソッドを私は制約を変更する必要があるのだろうか – user2636197

+0

あなたのlabel.doneのスペースの先頭と末尾にthis.Manuallyセットアップ制約を試してください。これは動的な高さを与え、デバイスのサイズに応じてプログラムで幅を設定します。これはあなたの問題を解決する簡単な方法です。あなたのcell.textlabel.numberOfLines = 0とcell.sizeToFit()を設定したどこかに教えてください。これは動作します... – Joe

答えて

2

のUITableViewCellオブジェクトは、再利用可能な、つまり、再利用識別子-このメソッドは、オブジェクトがのUITableViewメソッドdequeueReusableCellWithIdentifierから返される直前に呼び出されたされた場合:。パフォーマンス上の理由から、アルファ、編集、選択状態など、コンテンツに関連しないセルの属性のみをリセットする必要があります。 tableView:cellForRowAtIndexPath:のテーブルビューのデリゲートは、セルの再利用時に常にすべてのコンテンツをリセットする必要があります。セルオブジェクトに関連する再利用識別子がない場合、このメソッドは呼び出されません。このメソッドをオーバーライドする場合は、必ずスーパークラスの実装を呼び出す必要があります。

したがって、あなたはprepareForReuseを使用できますが、パフォーマンス上の理由のために、tableView:cellForRowAtIndexPath: を使う方が良いでしょう。

私がドキュメントを理解していれば、prepareForReuseはできるだけ早く、dequeueReusableCellWithIdentifier:も速くなるはずです。したがって、別の方法で制約を変更する方が良いでしょう(tableView:cellForRowAtIndexPath: