0

アプリケーションに次のインターフェイスレイアウトがあります。

ここに画像の説明を入力してください

テキストフィールドをクリックすると([タグの追加]をクリックすると、新しいテキストフィールドが追加されます)、キーボードに邪魔されないようにビューを上にスクロールして、ユーザーが入力内容を正しく確認できるようにしますが、次のようになります。そうする:

ここに画像の説明を入力してくださいここに画像の説明を入力してください

これは私がスクロールするために使用するコードです:

- (void)keyboardWillShow:(NSNotification *)notification {
  if (self.keyboardIsShown) {
    return;
  }

  NSValue *keyboardBoundsValue = [[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey];
  CGSize keyboardSize = [keyboardBoundsValue CGRectValue].size;

  NSTimeInterval animationDuration = 0.3;

  CGRect frame = self.view.frame;

  frame.origin.y -= keyboardSize.height - 94 + self.firstResponder.superview.superview.frame.origin.y;
  frame.size.height += keyboardSize.height - 94 + self.firstResponder.superview.superview.frame.origin.y;

  [UIView beginAnimations:@"ResizeForKeyboard" context:nil];
  [UIView setAnimationBeginsFromCurrentState:YES];
  [UIView setAnimationDuration:animationDuration];
  self.view.frame = frame;
  [UIView commitAnimations];

  self.keyboardIsShown = YES;
}

- (void)keyboardWillHide:(NSNotification *)notification {
  NSValue *keyboardBoundsValue = [[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey];
  CGSize keyboardSize = [keyboardBoundsValue CGRectValue].size;

  NSTimeInterval animationDuration = 0.3;

  CGRect frame = self.view.frame;

  frame.origin.y += keyboardSize.height - 94 + self.firstResponder.superview.superview.frame.origin.y;
  frame.size.height -= keyboardSize.height - 94 + self.firstResponder.superview.superview.frame.origin.y;

  [UIView beginAnimations:@"ResizeForKeyboard" context:nil];
  [UIView setAnimationBeginsFromCurrentState:YES];
  [UIView setAnimationDuration:animationDuration];
  self.view.frame = frame;
  [UIView commitAnimations];

  self.keyboardIsShown = NO;
}

ビュー要素をナビゲーションバーの後ろに表示したり、非表示にしたり、適切に機能する別の回避策を作成したりする方法はありますか?

4

2 に答える 2

1

目的を達成するための簡単な方法は、ビューツリーの「コンテンツ」ビューの下にナビゲーションバーを配置することです。そうすれば、ナビゲーションバーは上部に残ります。コンテンツを動的に追加する場合。ナビゲーションバーの後ろにあるビューのサブビューとしてそれらを追加してください。

// 編集

コメントで提案されているように:

self.view.clipsToBounds = YES;
CGRect frame = self.yourWrappingView.frame;
NSUInteger distanceToMove = 200;
self.yourWrappingView.frame = CGRectMake(frame.origin.x - distanceToMove, frame.origin.y, frame.size.width, frame.size.height);

これはあなたの仲間のために働くはずです:)

于 2012-05-08T21:50:39.153 に答える
0

おそらく、実際のを使用していませんUINavigationController。しかし、あなたはすべきです。したがって、これらの問題や正しいサイズ変更の動作は発生しません。しかし、現在のアーキテクチャでそれを解決するには、次のようにします。

  • ナビゲーションバーがnibファイル/ストーリーボードの一番上のオブジェクトであることを確認してください
  • UINavigationBarにIBOutletを追加し、新しいビューを動的に挿入する場合は、[self insertSubview: newView belowSubview: navigationBarOutlet];
于 2012-05-08T22:15:32.123 に答える