我尝试以这种方式进行操作:reloadAllComponents:
单击按钮时调用但不调用rowHeightForComponent:
3 回答
您不需要像@auspicious99
建议的那样释放 pickerView 来设置新的单元格高度。而是在每次触发 reloadAllComponents 时设置委托或数据源,如下所示:
pickerView.delegate = self; //or pickerView.dataSource = self;
[pickerView reloadAllComponents];
为什么 reloadAllComponents 方法不触发 rowHeightForComponent 方法真的很奇怪,但这看起来是使用上述技巧的有效解决方法。
希望能帮助到你。
从文档来看,它看起来reloadAllComponents:
只是为组件内的新数据调用代理,但大概不会询问大小。
相反,我会尝试调用rowSizeForComponent:
每个组件。在此方法的文档中,它说:“返回:给定组件中行的大小。这通常是显示组件中用作行的最大字符串或视图所需的大小。选择器视图获取的值这个属性通过调用pickerView:widthForComponent:和pickerView:rowHeightForComponent:委托方法,并缓存。默认值为(0, 0)。
然后,在您的 UIPickerViewDelegate 中,我将同时实现pickerView:widthForComponent:
和pickerView:rowHeightForComponent:
。
您可能需要释放 UIpickerview 并在 pickerView:rowHeightForComponent 中使用适当的返回值创建另一个:
这似乎很痛苦,但我想不出另一种解决方案。
不幸的是,调用 rowSizeForComponent 似乎无济于事,因为正如文档所说,“选择器视图通过调用 pickerView:widthForComponent: 和 pickerView:rowHeightForComponent: 委托方法来获取此属性的值,并缓存它。” 因此,调用 rowSizeForComponent 只提供缓存的值,而不是调用 pickerView:rowHeightForComponent: 来获取新值。