2011-04-17 50 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