私はこの方法でそれをやろうとしました:reloadAllComponents:
ボタンがクリックされたときに呼び出しますが、呼び出しませんrowHeightForComponent:
3 に答える
ドキュメントから、コンポーネント内の新しいデータのデリゲートを呼び出すだけのように見えますreloadAllComponents:
が、おそらくサイズは要求しません。
rowSizeForComponent:
代わりに、各コンポーネントを呼び出してみます。このメソッドのドキュメントでは、「戻り値: 指定されたコンポーネントの行のサイズ。これは通常、コンポーネントで行として使用される最大の文字列またはビューを表示するために必要なサイズです。ピッカー ビューはの値をフェッチします。 pickerView:widthForComponent: および pickerView:rowHeightForComponent: デリゲート メソッドを呼び出してこのプロパティを取得し、それをキャッシュします。デフォルト値は (0, 0) です。"
次に、UIPickerViewDelegate で、 と の両方を実装しpickerView:widthForComponent:
ますpickerView:rowHeightForComponent:
。
提案されたように、新しいセルの高さを設定するために pickerView を解放する必要はありません@auspicious99
。代わりに、次のように reloadAllComponents をトリガーするたびにデリゲートまたは dataSource を設定します。
pickerView.delegate = self; //or pickerView.dataSource = self;
[pickerView reloadAllComponents];
reloadAllComponents メソッドが rowHeightForComponent メソッドをトリガーしない理由は本当に奇妙ですが、これは上記のトリックを使用した有効な回避策のようです。
それが役に立てば幸い。
UIpickerview を解放し、pickerView:rowHeightForComponent で適切な戻り値を持つ別のものを作成する必要がある場合があります。
これは苦痛のように思えますが、別の解決策をすぐに思いつくことはできません。
残念ながら、ドキュメントにあるように、「ピッカー ビューは pickerView:widthForComponent: および pickerView:rowHeightForComponent: デリゲート メソッドを呼び出してこのプロパティの値を取得し、それをキャッシュする」ため、rowSizeForComponent の呼び出しは役に立たないようです。したがって、新しい値を取得するために pickerView:rowHeightForComponent: を呼び出すのではなく、rowSizeForComponent を呼び出すと、キャッシュされた値のみが提供されます。