2012-07-13 77 views
6

我製作了自定義鍵盤視圖並將其鏈接到UITextField的inputView屬性。 有沒有辦法改變方向更改時自定義inputView的高度,並使框架像系統鍵盤一樣平滑地進行動畫變化? 我的鍵盤尺寸爲768x272,當設備橫向變大時,尺寸變爲1024x272,但我想使它變得更大,如1024x372。如果我在獲取UIDeviceOrientationDidChangeNotification時使用下面的代碼更改了框架,則更改動畫不平滑。設備旋轉時更改自定義輸入視圖的高度

textField.inputView.frame = CGRectMake(0,0,1024,372); 
+0

你嘗試把它放在動畫塊下? – Zaraki 2012-07-13 12:31:27

+0

我試圖把它作爲一個動畫塊 willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation時間:(NSTimeInterval)持續時間 但結果是一樣的,高度從小到高的瞬間變化,那麼動畫開始,使其短寬。 – user1477781 2012-07-13 13:17:09

回答

2

經過多次實驗後,我找到了自己問題的最佳答案。當你得到UIKeyboardDidHideNotification時,簡短的回答是改變框架。

定製inputView被嵌入在由稱爲UIPeripheralHostView系統控制的另一視圖。 因此,在錯誤的時間更改自定義inputView不會立即反映出來,或者最多顯示一個醜陋的佈局。

當設備旋轉時,系統簡單地隱藏鍵盤,然後執行從鍵盤舊取向到新的方向的旋轉動畫。我認爲動畫塊插入在兩個通知UIKeyboardDidHideNotificationUIKeyboardWillShowNotification之間的某處。這些通知加上UIKeyboardWillChangeFrameNotification。此通知中的「框架」實際上是指框架UIPeripheralHostView

因此,當我得到UIKeyboardDidHideNotification時,更改輸入視圖的框架使系統有機會在動畫開始之前調整UIPeripheralHostView的框架,從而導致在方向更改期間從短鍵盤平穩過渡到高鍵盤。

這適用於iOS 5,但蘋果可能會改變未來的做法。

+0

在iOS 6中,當你有一個自定義的inputView時,你將不會收到UIKeyboardWillShowNotification等通知 – theraven 2013-02-03 22:55:36

6

Apple documentation for UIResponder.inputView: 「如果UIKit在其自動調整大小的掩碼中遇到具有UIViewAutoresizingFlexibleHeight值的輸入視圖,它將更改高度以匹配鍵盤。

所以,如果你想定製的高度,你不應該指定UIVieAutoresizingFlexibleHeight面具。

相關問題