1

我尝试以这种方式进行操作:reloadAllComponents:单击按钮时调用但不调用rowHeightForComponent:

4

3 回答 3

1

您不需要像@auspicious99建议的那样释放 pickerView 来设置新的单元格高度。而是在每次触发 reloadAllComponents 时设置委托或数据源,如下所示:

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

为什么 reloadAllComponents 方法不触发 rowHeightForComponent 方法真的很奇怪,但这看起来是使用上述技巧的有效解决方法。

希望能帮助到你。

于 2014-10-29T10:35:25.503 回答
1

从文档来看,它看起来reloadAllComponents:只是为组件内的新数据调用代理,但大概不会询问大小。

相反,我会尝试调用rowSizeForComponent:每个组件。在此方法的文档中,它说:“返回:给定组件中行的大小。这通常是显示组件中用作行的最大字符串或视图所需的大小。选择器视图获取的值这个属性通过调用pickerView:widthForComponent:和pickerView:rowHeightForComponent:委托方法,并缓存。默认值为(0, 0)。

然后,在您的 UIPickerViewDelegate 中,我将同时实现pickerView:widthForComponent:pickerView:rowHeightForComponent:

于 2012-04-26T11:17:49.063 回答
0

您可能需要释放 UIpickerview 并在 pickerView:rowHeightForComponent 中使用适当的返回值创建另一个:

这似乎很痛苦,但我想不出另一种解决方案。

不幸的是,调用 rowSizeForComponent 似乎无济于事,因为正如文档所说,“选择器视图通过调用 pickerView:widthForComponent: 和 pickerView:rowHeightForComponent: 委托方法来获取此属性的值,并缓存它。” 因此,调用 rowSizeForComponent 只提供缓存的值,而不是调用 pickerView:rowHeightForComponent: 来获取新值。

于 2012-11-28T17:33:34.883 回答