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 回答