2011-04-17 49 views
4

我在使用UIPickerView时发现了一个问题,我想知道是否有人曾经遇到过它:有时当滚动其中一个轮子时,它会卡在两行之间(触摸结束后),并保持无限期地。稍微再次拖动轮子并释放总是能够纠正问题,但无论如何,我都不明白为什么这首先发生。它在模拟器和实际设备上进行测试时发生。UIPickerView卡在行之间?

问题不在于当车轮卡死时不得不重新调整车轮的烦恼,而是有时在车轮非常靠近选择一排时(但实际上并未选择它)卡住了,这可以给用户一个印象,即他们选择了一个给定的行,而当他们确实没有时。

这发生在其他人身上吗?如果是这样,有没有办法解决它?

感谢,

克里斯

+0

同样的问题在这里。无法弄清楚为什么它会一直这样做。 – Davido 2011-04-27 22:37:10

+0

我最近在某些项目中看到了这一点。你有没有想过它。 – Imran 2014-10-07 17:56:26

+0

面对相同,但它是随机问题,只发生几次。 – 2015-07-02 13:30:13

回答

0

我想我已经想通了。如果你是在荷载作用下的UIPickerView的观点,你需要设置采摘委托,像这样:

picker.delegate = self; 

这应该解决的问题,并导致选择器上的值自动居中,而不是行之间浮动。

2

仍然没有想出解决这个......最好的解决办法的好办法我已经能够想到的是,包括在pickerView:didSelectRow:inComponent:方法如下一行:

[pickerView selectRow:[pickerView selectedRowInComponent:0] inComponent:0 animated:YES]; 

这将使指定的组件会回滚到正确的行上,确保用户始终能够精确地表示所选内容,但是当您认为组件将停止在某一行上时,它有时会显得很奇怪,只能看到它在在停止之前相反的方向。

1

我有一个问题非常类似于此。 UIPickerView将在各行之间滚动并停止。通常情况下,这个视图不会在行之间停下来,即使您试图在两个项目之间停止它,它也会自动滚动到下一行。即使他们使用相同的代码来实例化UIPickerView,我也有许多应用程序未显示问题。

经过多次调查,我发现我的问题是过度使用CPU。我的应用程序是一个OpenGL游戏,所以我有一个尽可能快的游戏循环来更新帧。无可否认,我的游戏受CPU限制,并没有达到全帧速率。当pickerView弹出时,我正在后台运行游戏,以便用户进行选择。这似乎没有为UIPickerView留下CPU来检测它在行之间停止并将自身拉到最近的行。

我简单的解决方案是在选取器视图启动时暂停游戏。

我看到这个答案是晚了一年,但我花了一段时间才弄清楚,所以希望它有助于某人。

0

你应该在pickerview委托方法(pickerView:viewForRow:forComponent:reusingView :)中检查子视图的帧。框架高度不应超过内容视图的高度。

+0

这是一条评论,而不是答案。 – Alex 2015-11-08 14:57:00