Невозможно прокрутить? Что не так с моим кодом? - PullRequest
0 голосов
/ 19 марта 2011

Это мой код следующим образом:

-(void) viewWillAppear:(BOOL)animated {
    [super viewWillAppear:YES];

    NSLog(@"------>> Reigster for keyboard events");
    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(keyboardDidShow:) 
                                                 name:UIKeyboardDidShowNotification 
                                               object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(keyboardDidHide:) 
                                                 name:UIKeyboardDidHideNotification 
                                                object:nil];

    keyboardVisible = NO;
}

-(void) viewWillDisappear:(BOOL)animated {
    NSLog(@"--->>Unregister keyboard event");
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}


-(void)keyboardDidShow:(NSNotification *) notif{
    NSLog(@"Received did show notifiation");

    if (keyboardVisible) {
        NSLog(@"Keyboard is already visible... ignoring notification");
        return;
    }

    NSLog(@"Resizing smaller for keboard");

    NSDictionary *info = [notif userInfo];
    NSValue *aValue = [info objectForKey:UIKeyboardFrameBeginUserInfoKey];
    CGSize keyboardSize = [aValue CGRectValue].size;

    CGRect viewFrame = self.view.frame;
    viewFrame.size.height -= keyboardSize.height;

    scrollView.frame = viewFrame;
    scrollView.contentSize = CGSizeMake(viewFrame.size.width, viewFrame.size.height);

    //scrollView.contentSize = CGSizeMake(296, 217);
    keyboardVisible = YES;
}


-(void) keyboardDidHide:(NSNotification *) notif {
    NSLog(@"Received did Hide notification");

    if (!keyboardVisible) {
        NSLog(@"keyboard already hidden. Ignoring notification");
        return;
    }

    NSLog(@"Resizing bigger with no keyboard");

    NSDictionary *info = [notif userInfo];
    NSValue *aValue = [info objectForKey:UIKeyboardFrameBeginUserInfoKey];
    CGSize keyboardSize = [aValue CGRectValue].size;

    CGRect viewFrame = self.view.frame;
    viewFrame.size.height += keyboardSize.height;

    //scrollView.contentSize = CGSizeMake(296, 417);

    scrollView.contentSize = CGSizeMake(viewFrame.size.width, viewFrame.size.height);
    keyboardVisible = NO;
}

Ответы [ 2 ]

0 голосов
/ 19 марта 2011

Есть две проблемы.Во-первых, вы должны использовать UIKeyboardFrameEndUserInfoKey вместо UIKeyboardFrameBeginUserInfoKey.

Во-вторых, вам действительно следует использовать исходную позицию клавиатуры после преобразования ее в локальное координатное пространство вашего представления.Простое использование возвращенного кадра без использования - [UIView convertRect: fromView:] не будет работать, если устройство находится в альбомной ориентации или координаты вашего вида отличаются от координат окна.Вы должны использовать источник преобразованных координат вместо высоты, поскольку высота может относиться к той части клавиатуры, которая находится за пределами экрана.Это происходит, например, при использовании клавиатуры Bluetooth.

0 голосов
/ 19 марта 2011

Тот же вопрос обсуждался ранее, я хотел бы, чтобы вы пошли на этот ТАК вопрос и самостоятельно выяснили, чего не хватает.

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