iOS7 UIScrollView contentInset не работает

когда клавиатура была скрыта, scrollview должен вернуться к исходному contentInset, но он не работает в iOS7. Настройка contentInset scrollview, когда клавиатура была показана, работает, но когда клавиатура была скрыта, contentInset scrollview не может установить нулевую вставку. Код:

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardDidShowNotification object:Nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasHidden:) name:UIKeyboardDidHideNotification object:nil];
}

- (void)keyboardWasShown:(NSNotification *)notif
{
    CGSize keyboardSize = [[[notif userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
    UIEdgeInsets contentInsets = UIEdgeInsetsMake(0, 0, keyboardSize.height, 0);


    UIScrollView *scrollView = (UIScrollView *)self.view;
    scrollView.contentInset = contentInsets;
    scrollView.scrollIndicatorInsets = contentInsets;

    CGRect rect = self.view.frame;
    rect.size.height -= keyboardSize.height;
    if (!CGRectContainsPoint(rect, self.wishContentField.frame.origin)) {
        CGPoint point = CGPointMake(0, self.wishContentField.frame.origin.y - keyboardSize.height);
        [scrollView setContentOffset:point animated:YES];
    }

}
- (void)keyboardWasHidden:(NSNotification *)notif
{
    UIEdgeInsets zeroInsets = UIEdgeInsetsZero;
    UIScrollView *scrollView = (UIScrollView *)self.view;
    [scrollView setContentInset:zeroInsets];
    scrollView.scrollIndicatorInsets = zeroInsets;
}

4 ответов


попробуй это:

self.automaticallyAdjustsScrollViewInsets = NO;

это работает для меня...


это может быть связано с contentSize не работает за исключением случаев, когда установлено в VCs

- (void)viewDidLayoutSubviews
{
     self.scrollView.contentSize = whatever
}

просто говорю, что вы можете разбить голову о неправильную стену


Итак, просто потому, что я все еще нашел этот ответ полезным, вот что я сделал. Я последовал совету @alex-i и комментарию @yong-ho. Но по какой-то причине высота навигационной панели была недостаточной.

UIEdgeInsets contentInsets = UIEdgeInsetsMake(self.navigationController.navigationBar.frame.size.height + 20.0f, 0.0, 0.0, 0.0); 
scrollView.contentInset = contentInsets;
scrollView.scrollIndicatorInsets = contentInsets;

Как я уже сказал, я должен был добавить, что 20.0 f или мой контент все еще был отрезан. Не знаю почему. Если я это выясню, я обновлю свой ответ.


установить contentOffset в ноль. Он будет работать во всех случаях независимо от того, что ваш вид прокрутки находится внутри навигационного контроллера или любого другого. Найти ниже фрагмент кода для того же:

- (void)keyboardWasHidden:(NSNotification *)notif
{    
    UIScrollView *scrollView = (UIScrollView *)self.view;
    scrollView.contentOffset = CGPoint.zero
}