2012-09-10 46 views
1

我對Apple文檔Moving content located under the keyboard中的代碼有疑問。我已經研究過這個,但是在我開始變得對替代解決方案感興趣之前,我正在尋求澄清我在這裏模糊的概念。位於鍵盤下方的移動內容

不幸的是,只要鍵盤動畫結束鍵盤向上移動,視圖就會向下移動並完全脫離現場。無論文本字段實際上是否被鍵盤覆蓋,都會發生這種情況。所以現在我回來試圖理解文檔中提供的代碼,並嘗試更改各種參數後,我一直無法使它正常工作。

由蘋果公司提供的相關代碼:

- (void)keyboardWasShown:(NSNotification*)aNotification 

NSLog(@"keyboardWasShown"); 
NSDictionary* info = [aNotification userInfo]; 
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 

UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0); 
scrollView.contentInset = contentInsets; 
scrollView.scrollIndicatorInsets = contentInsets; 

// If active text field is hidden by keyboard, scroll it so it's visible 
// Your application might not need or want this behavior. 
CGRect aRect = self.view.frame; 
aRect.size.height -= kbSize.height; 
if (!CGRectContainsPoint(aRect, activeField.frame.origin)) { 
    NSLog(@"if"); 
    CGPoint scrollPoint = CGPointMake(0.0, activeField.frame.origin.y-kbSize.height); 
    NSLog(@"scrollPoint is %@", NSStringFromCGPoint(scrollPoint)); 
    [scrollView setContentOffset:scrollPoint animated:YES]; 

首先,之前我改變什麼,如下所述,這裏就是我得到:

GO[4614:c07] keyboardWasShown 
2012-09-08 22:58:23.892 DRO GO[4614:c07] if 
2012-09-08 22:58:23.892 DRO GO[4614:c07] scrollPoint is {0, -281} 

所以,打破了下去:

  1. NSLog只是我的信息表明方法被稱爲

  2. NSDictionary - 包含有關鍵盤的信息,包括其尺寸,以便不同設備或方向的不同鍵盤尺寸將被自動計算。

  3. CGSize - 從字典獲得的實際大小

  4. UIEdgeInsets - 發現UIKit中函數參考參考 - 用於按鈕創建一個邊緣插入或視圖,其中的插圖是圍繞繪製矩形的餘量,其中每個側(左,右,頂部和底部)可以有不同的值。在這種情況下,將底部邊緣設置在鍵盤的高度。由於我的觀點正在下降而不是上升,我試圖扭轉「頂部」和「底部」的價值觀,認爲它們可能倒過來。而不是動畫順利滾動的視圖,現在它只是在鍵盤彈出時閃爍不見,我得到這個:

    GO [4829:c07] if 2012-09-08 23:06:57.146 DRO GO [4829:c07] scrollPoint是{0,-281}

  5. scrollView.contentInset:內容視圖從內含滾動視圖插入的距離。 使用此屬性添加到內容周圍的滾動區域。單位的大小是點。默認值是UIEdgeInsetsZero 看起來像這樣應該將區域添加到滾動視圖的底部,以允許它隨鍵盤一起向上移動。

  6. scrollView.scrollIndicatorInset - 告訴滾動指示響應成比例地移動到視圖移動到鍵盤

  7. 的CGRect - 創建與所述視圖的尺寸的aRect對象。

  8. aRect - CGRect的高度值,減小鍵盤的高度。我在這裏超級模糊 - 應該是未被鍵盤遮蓋的區域。

  9. if - 如果CGpoint不在(位於鍵盤下方的矩形中,位於活動文本字段內的某個點處) - 這是沒有意義的;這裏的邏輯逃脫我

  10. 的NSLog - 告訴我,我們走到這一步

  11. CGScrollPoint - 定義視圖應該滾動的地步。由於查看原點位於左上角,因此減去鍵盤高度應使其向上滾動鍵盤高度的距離,從而保持文本字段不變。只是爲了踢,當我試圖改變它+ kbSizeHeight我得到視圖迅速消失,並且:GO [4682:c07]如果 2012-09-08 23:02:48.078 DRO GO [4682:c07] scrollPoint是{0, 679}

  12. 的NSLog - 告訴我什麼滾動點的觀點是被移動到

  13. [滾動視圖 - 告訴了滾動使用動畫

回答

4

,以適應新的scrollPoing我不不知道蘋果如何做,我相信他們建議將內容放入滾動視圖,然後當您點擊文本字段時,您將滾動視圖告訴sc捲起來,以便您可以看到您正在輸入的內容。

我是一個懶惰的人,所以我所做的只是告訴視圖本身,當用戶點擊將被鍵盤隱藏的字段時向上移動。

我通常這樣做有:

// shift view up 
self.view.transform = CGAffineTransformMakeTranslation(0, -someYOffsetValue); 

// shift view back down to original value 
self.view.transform = CGAffineTransformMakeTranslation(0, 0); 

您可以在一個UIView animateWithDuration把這個包:塊的平穩過渡。

+0

謝謝張。我試圖使用kbSize.height作爲偏移值,現在視圖消失而在鍵盤上留下黑色而不是灰色區域。 – j9suvak

+0

是的,謝謝,這是我從最初獲得代碼的地方。 :) – j9suvak