我在使用UIPickerView时发现了一个问题,我想知道是否有人曾经遇到过它:有时当滚动其中一个轮子时,它会卡在两行之间(触摸结束后),并且只是停留无限期地这样。再次拖动轮子并释放总能解决问题,但无论如何,我很困惑为什么会发生这种情况。在模拟器和实际设备上进行测试时都会发生这种情况。
问题不在于当它被卡住时必须重新调整轮子的烦恼,而是当它非常接近选择一排(但实际上没有选择它)时有时会卡住它可以给用户留下他们选择给定行的印象,而实际上他们没有。
这是否发生在其他任何人身上,如果有的话,有没有办法解决它?
谢谢,
克里斯
答案 0 :(得分:2)
仍然没有找到解决这个问题的好方法......我能够想到的最佳解决方案是在pickerView:didSelectRow:inComponent:
方法中包含以下一行:
[pickerView selectRow:[pickerView selectedRowInComponent:0] inComponent:0 animated:YES];
这将使指定的组件回滚到正确的行,确保用户始终看到所选内容的准确表示,但是当您认为组件将停在某一行时,它有时看起来很奇怪,在停止之前看到它向相反方向向后动画。
答案 1 :(得分:1)
我有一个与此非常相似的问题。 UIPickerView将在行之间滚动和停止。通常,此视图不会在行之间停止,即使您尝试在两个项目之间停止它,它也会将其自身滚动到下一行。我有很多应用程序没有显示问题,即使他们使用相同的代码来实例化UIPickerView。
经过多次调查后,我发现我的问题是CPU的使用率过高。我的应用程序是一个OpenGL游戏,所以我有一个游戏循环尽可能快地运行来更新帧。不可否认,我的游戏受CPU限制,无法实现全帧速率。当弹出pickerView以允许用户进行选择时,我在后台运行游戏。这似乎没有为UIPickerView留下任何CPU来检测它在行之间停止并将自己拉到最近的行。
我的简单解决方案是在选择器视图启动时暂停游戏。
我看到这个答案已经晚了一年,但我花了一段时间才想出来,所以希望它可以帮到某个人。
答案 2 :(得分:0)
我想我已经明白了。当您在加载中使用UIPickerView的视图时,您需要设置选择器委托,如下所示:
picker.delegate = self;
这应解决问题,并使选择器自动以值为中心而不是在行之间浮动。
答案 3 :(得分:0)
你应该在pickerview委托方法中检查子视图的帧(pickerView:viewForRow:forComponent:reusingView :)。帧高度不应超过内容视图的高度。