キーボードが非表示になっていると、スクロールビューは元のcontentInsetに戻りますが、iOS7では機能しません。キーボードが表示されているときにscrollviewのcontentInsetを設定していますが、キーボードが非表示になっているときは、scrollviewのcontentInsetを0に設定することはできません。 コード:iOS7 UIScrollView contentInsetが機能しない
- (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;
}
は、あなたが(どのようにそれを説明することができcontentSizeが
ちょうどあなたが間違って壁に頭を壊しかもしれないと言ったVCに設定されている場合を除き、 を動作していないに関係している可能性がありますキーボードが隠れた後に動作します)? iOS 7では、半透明の 'navigationBar'がある場合、View Controllerは、そうでなければ設定されていなければscrollviewsに一番上のインセットを設定します。これは 'contentInset.top = 0'を設定しているので、ここではそうかもしれないので、' navigationBar'または 'statusBar'の背後にあるコンテンツを隠すかもしれません。 –
ご返信ありがとうございます。私はtopをnavigationBar.frame.size.heightに設定しました、そして、今働いています。 –
答えを書いてalex-iにいくつかのクレジットを与えてください;) –