2012-04-26 83 views

回答

1

從文檔,它看起來像reloadAllComponents:只是呼籲組件內的新數據的委託,但想必不會要求大小。

相反,我會嘗試在每個組件上調用rowSizeForComponent:。在這個方法的文檔中,它說:「返回:給定組件中行的大小,這通常是顯示用作組件中一行的最大字符串或視圖所需的大小,選擇器視圖獲取這個屬性通過調用pickerView:widthForComponent:和pickerView:rowHeightForComponent:delegate方法並對其進行緩存,默認值爲(0,0)。「

然後,在你的UIPickerViewDelegate中,我會實現pickerView:widthForComponent:pickerView:rowHeightForComponent:

+0

我的意思是我需要改變行的大小,然後點擊與PickerView相同視圖的按鈕。 – eXhausted 2012-04-26 11:39:25

+0

那麼,你可以通過點擊按鈕時觸發一個方法來實現這一點,並且在該方法內部調用每個組件的rowSizeForComponent?假設你有一組組件可以通過... – 2012-04-26 19:39:01

0

您可能需要釋放UIpickerview然後再創建一個與pickerView適當的返回值:rowHeightForComponent:

這似乎是一個痛苦,但我想不出另一種解決方案副手的。

不幸的是,調用rowSizeForComponent不會有幫助,因爲正如文檔所說,「選擇器視圖通過調用pickerView:widthForComponent:和pickerView:rowHeightForComponent:委託方法和緩存來獲取此屬性的值它。」因此,調用rowSizeForComponent只會提供緩存的值,而不是調用pickerView:rowHeightForComponent:來獲取新值。

1

你不需要釋放pickerView來設置新的單元高度,如@auspicious99建議。 相反設置委託或數據源每次觸發這樣reloadAllComponents:

pickerView.delegate = self; //or pickerView.dataSource = self; 
[pickerView reloadAllComponents]; 

這真的很奇怪爲什麼reloadAllComponents方法不會觸發rowHeightForComponent方法,但是這看起來象是用上述伎倆一個有效的解決方法。

希望它有幫助。