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 ответов
это может быть связано с 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
}