UITextView не прокручивается после обновления его фрейма - PullRequest
1 голос
/ 01 февраля 2012

Я зарегистрировался для уведомлений о показе и скрытии клавиатуры.

Текстовое представление прокручивается, когда на него не нажимают .. т.е. когда оно не находится в редактируемом режиме .. Когда пользователь нажимает .. я обновляю его фрейм, чтобы появиться .., и после этого он не прокручивается.. после окончания редактирования .. я снова изменяю его позицию обратно на прокручиваемый ..

Вот мой код

- (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;
}

Я даже включил прокрутку и изменил размер ее содержимого в методах.

1 Ответ

1 голос
/ 01 февраля 2012

Это звучит очень странно.
Мои предложения:
1. Убедитесь, что не свойство UserInteractioEnable его суперпредставления в новом фрейме не ложно
2. Попробуйте этот код в новом и понятном проекте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...