2012-02-01 9 views
1

キーボードの表示と非表示の通知に登録しました。UITextViewがフレームを更新した後にスクロールしない

テキストビューはクリックされていないとき、つまり編集可能モードでないときにスクロール可能です。 ユーザーが..をクリックすると、フレームがアップします。その後、スクロールしません。 。編集が終了した後..私は

はここに私のコード

- (void)keyboardWillHide:(NSNotification *)n 
{ 
    NSDictionary* userInfo = [n userInfo]; 

    // get the size of the keyboard 
    CGSize keyboardSize = [[userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 


    // resize the scrollview 
    CGRect viewFrame = self.NoteTextView.frame; 
    // I'm also subtracting a constant kTabBarHeight because my UIScrollView was offset by the UITabBar so really only the portion of the keyboard that is leftover pass the UITabBar is obscuring my UIScrollView. 
    viewFrame.origin.y += (keyboardSize.height * 0.36); 

    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 
    // The kKeyboardAnimationDuration I am using is 0.3 
    [UIView setAnimationDuration:0.1]; 

    [UIView commitAnimations]; 

    [self.NoteTextView setContentSize:CGSizeMake(310,580)]; 
    [self.NoteTextView setScrollEnabled:YES]; 

    keyboardIsShown = NO; 
} 

- (void)keyboardWillShow:(NSNotification *)n 
{ 
    // This is an ivar I'm using to ensure that we do not do the frame size adjustment on the UIScrollView if the keyboard is already shown. This can happen if the user, after fixing editing a UITextField, scrolls the resized UIScrollView to another UITextField and attempts to edit the next UITextField. If we were to resize the UIScrollView again, it would be disastrous. NOTE: The keyboard notification will fire even when the keyboard is already shown. 
    if (keyboardIsShown) { 
     return; 
    } 

    NSDictionary* userInfo = [n userInfo]; 

    // get the size of the keyboard 
    CGSize keyboardSize = [[userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 


    // resize the noteView 
    CGRect viewFrame = self.NoteTextView.frame; 
    // I'm also subtracting a constant kTabBarHeight because my UIScrollView was offset by the UITabBar so really only the portion of the keyboard that is leftover pass the UITabBar is obscuring my UIScrollView. 
    viewFrame.origin.y -= (keyboardSize.height * 0.36); 

    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 
    // The kKeyboardAnimationDuration I am using is 0.3 
    [UIView setAnimationDuration:0.3]; 
    [self.NoteTextView setFrame:viewFrame]; 
    [UIView commitAnimations]; 


    [self.NoteTextView setContentSize:CGSizeMake(310, 580)]; 
    [self.NoteTextView setScrollEnabled:YES]; 
    keyboardIsShown = YES; 
} 

私も有効になってスクロールを有効にした方法でそのコンテンツのサイズを変更した..ですそのスクロール再びその位置をバックに変更します。

+0

アニメーションを付けずに同じことをやってみて、それが機能しているかどうか確認しましたか? – KDaker

+0

はい..私はしようとしました。しかし、うまくいきませんでした。だから、私が試みたソリューションは、ツールバーにバーボタン項目を追加し、それをテキストビューのアクセサリビューとして追加することです...ユーザー入力によってスクロール可能になりました。 。 – Shubhank

+0

私はアクセサリビューなしで動作させる方法がなければならないと確信しています。私は問題が上記のコードに関連していないと推測しています。たぶんそれは他のUIViewの存在と関係があります。注文の問題かもしれません。他のUIViewやコントロールは、そのクラスにありますか? – KDaker

答えて

1

本当に変わっています。
私の提案:
1.新しいフレーム内のスーパービューのUserInteractioEnableプロパティのうち、非有効でないものが偽でないことを確認してください。
2.このコードを新規で明確なプロジェクトで試してください。

+0

スーパービューで 'userInteractionEnabled'プロパティをチェックすることは重要です。それは私が持っていた同様の問題を解決しました。 –

関連する問題