带有自定义视图的 UIPickerView 在 iOS7 中被破坏

Posted

技术标签:

【中文标题】带有自定义视图的 UIPickerView 在 iOS7 中被破坏【英文标题】:UIPickerView with custom views broken in iOS7 【发布时间】:2013-10-30 02:53:44 【问题描述】:

我有一个带有 UIPickerView 的应用程序。我正在使用该方法返回一个自定义视图

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view 

ios 6 中看起来还不错。在 iOS 7 中,情况就不那么好了——屏幕截图如下。

请注意,在没有焦点的单元格中,第二列和第三列重叠。中间行是正确的。

有什么建议吗?

【问题讨论】:

这很奇怪。我已经创建了一个来测试它。但一切都好。示例snipt.org/BaIi0/Default. 【参考方案1】:

似乎出于一个奇怪的原因,如果任何列的宽度高于选择器视图宽度的 1/3,布局就会中断。因此,如果您有一个 320 像素宽的选取器视图,则 106 或更少的视图正在工作,但 107 或更高是错误的,无论您是否有 2、3、4 ... 组件。真奇怪。

【讨论】:

目前我看到的唯一解决方法是在 iOS 7 上增加第一个组件的宽度,并减少其他组件的宽度。 谢谢!如今仍在发生。【参考方案2】:

正如 imihaly 在他之前的帖子中所说,看起来只有当 LAST 组件的 widthForComponent 值超过 106 像素时才会发生这种情况。其他组件可以返回超过 106 的值,它看起来会很好。此外,如果您返回的视图的宽度小于 widthForComponent 返回的值,它将使视图居中,但会向左偏移大约 10 个像素。

【讨论】:

【参考方案3】:

我遇到了类似的问题,但我显示的是简单的数字。见my similar question。简短的回答是我必须将组件分解为不同的 UIPickerViews。

【讨论】:

【参考方案4】:

正如@imihaly 提到的,我想出的只有一种解决方案来增加添加到视图中的选择器视图的宽度。

我创建了一个类似https://github.com/Dharmesh-shah2412/demoPickerView的演示

【讨论】:

以上是关于带有自定义视图的 UIPickerView 在 iOS7 中被破坏的主要内容,如果未能解决你的问题,请参考以下文章

UIPickerView 自定义视图奇怪的行为

带有 .xib 文件的 UIPickerView 自定义布局

带有自定义日期的 UIPickerView

UIPickerView 自定义视图不可视化

在 UIPickerView 中使用自定义视图时突出显示选择和自动向上/向下滚动

iOS7 UIPickerView 的奇怪行为与 UIImage 作为自定义视图,任何官方信息?