2017-10-09 52 views
1

我有一個滾動視圖,其中包含許多文本字段作爲子視圖,我希望所選文本字段(_activeField)在鍵盤出現時向上滾動。ScrollView的scrollRectToVisible鍵盤通知在iOS中無法正常工作11

- (void) keyboardUP:(NSNotification *)notification 
{ 
NSDictionary* info = [notification userInfo]; 
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 

UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height + 10, 0.0); 
_scroller.contentInset = contentInsets; 
_scroller.scrollIndicatorInsets = contentInsets; 

CGRect aRect = App_Delegate.window.frame; 
aRect.size.height -= kbSize.height; 

CGRect rect = [_activeField convertRect:_activeField.frame fromView:App_Delegate.window]; 

if (!CGRectContainsPoint(aRect, rect.origin)) 
{ 
    [_scroller scrollRectToVisible:rect animated:YES]; 
} 

}

此代碼爲iOS 10工作正常,但在iOS的11,其沒有工作,「scrollRectToVisible」不滾動了滾動,即使其內容的大小是正確的。

+0

嘗試使用[TPKeyboardAvoiding(https://開頭github.com/michaeltyson/TPKeyboardAvoiding)而不是,更容易 – Srdjan

+0

我基本上很好奇,知道是否有限制這個代碼的功能的iOS11中的ScrollView有任何特定的變化。 –

+0

我有同樣的問題,沒有時間檢查,因爲生產應用程序有問題,所以我添加了庫,它是固定的 – Srdjan

回答

-1

這是this issue的副本。

使用UIKeyboardFrameEndUserInfoKey

if let userInfo = notification.userInfo { 
    if let keyboardSize = (userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue { 
     print(keyboardSize) 
    } 
} 

和ObjC

- (void)keyboardWillShow:(NSNotification *)notification { 
    CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size; 
} 
+1

這不是您鏈接問題的重複內容。而你的回答並不能解決問題。 –

+0

Vin Gazoil,我有一個OPs確切問題的項目,停止使用iOS11。這是解決方案,並且之前已經討論過。爲什麼不告訴我你正在談論的內容,因爲我認爲你的評論在任何意義或方式上都是不恰當的。 – aug2uag

+0

在鏈接的問題中,OP無法獲得鍵盤的高度,這裏OP在scrollRectToVisible函數中遇到了問題。你提供的代碼可能解決你的問題,它沒有解決我的問題(與OP的一樣),但是恕我直言,這是一個糟糕的解決方案,因爲真正的問題是,正如Peter提到的,這個函數沒有在主線程中調用。對不起,如果我的第一個評論是有點粗魯。 –

1

我不知道

- (void) keyboardUP:(NSNotification *)notification 

,但已經看到了

- (void)handleKeyobardDidShowNotification:(NSNotification *)notification 
0類似的問題

它看起來像這樣不再iOS的主線程上運行11

嘗試運行你打電話scrollRectToVisible主線程上進行如下

dispatch_async(dispatch_get_main_queue(), ^{ 
     [_scroller scrollRectToVisible:targetPosition animated:YES]; 
    });