2017-10-24 16 views
1

カスタムTableViewCellのサブビューをアニメーション化したいです。このアニメーションを実行するには、セルにこのサブビューの幅が必要です。この幅は自動レイアウト制約によってレイアウトされます。viewDidLayoutカスタムUITableViewCellのサブビュー

ただし、cellForRowAtIndex関数(mycell.animate())でアニメーション機能を使用すると、サブビューがまだレイアウトされていないためアニメーションが機能しないため、幅は0になります。

通常のビューでは、viewDidLayoutSubviews()を使用します。これは、ビューがレイアウトされているため、幅を取得してアニメーションを実行できるためです。しかし、カスタムUITableViewCellの同等の機能は何ですか?

私はテーブルビューの willDisplayデリゲート機能を試してみましたが、私は細胞のサブビューの幅をプリントアウトするとき、それはまだ

+0

あなたはおそらく、UITableViewCellのサブクラスを作成し、そこから移動する必要があります。 – luk2302

+0

hmm私は実際には、それが不明な場合はごめんなさい – Pascal

+0

これはおそらくそれより深いですが、 'cellForRow:at:'の表のセルに幅を割り当ててみましたか? 'cell.frame.size.width = tableView.frame.size.width' – Eugene

答えて

3

正しい場所が内部layoutSubviewsです... 0言う:

class MyCell : UITableViewCell { 
    override func layoutSubviews() { 
     super.layoutSubviews() 
     // do your thing 
    } 
} 
+0

こんにちは、私はこのアプローチを使用してカスタムUITableViewCellにグラデーションを追加しようとしています。 'layoutSubviews()'の中で 'applyGradient()'関数を呼びます。テーブルがロードされてもグラデーションは表示されませんが、セルをクリックするとグラデーションが表示されます。クリックする前にグラデーションが表示されない理由は何ですか?私は 'layoutSubviews()'を私のコードの別の場所から呼び出してみました。 @ luk2302 – Chamanhm

関連する問題