【问题标题】:How can I prevent the keyboard from covering up subviews on a UIViewController?如何防止键盘覆盖 UIViewController 上的子视图?
【发布时间】:2015-06-09 17:29:10
【问题描述】:

在我的 UITableViewControllers 中,当屏幕上显示键盘时,我通常会通过 NSLayoutConstraint IBOutlet(例如 @property (weak, nonatomic) IBOutlet NSLayoutConstraint *constraintTableViewBottomToSuperViewBottom)为 tableView 的底部设置动画。然后如果键盘在屏幕上动画,我将键盘的大小添加到约束中,如果键盘消失,我从约束中删除键盘大小。

像魅力一样工作。

现在,我需要做同样的事情,但使用 UIViewController 而不是 UITableViewController。

我有点困惑。当我使用 UITableViewController 执行此操作时,这很容易。我的 tableView 的高度随着键盘的显示而变小,但我仍然可以通过上下滚动 tableView 轻松查看所有数据。

如果我使用 UIViewController 的主 UIView 执行此操作,当键盘显示在屏幕上时,我会缩短 UIViewController 的主视图的高度,但这会缩小/倾斜该主视图上的所有子视图,从而压缩它们。你如何解决这个问题?

【问题讨论】:

  • 最好的办法就是把viewcontroller的view的整个frame移到顶部
  • 在 UIViewController 中的 self.view 上使用滚动视图。然后它会工作。

标签: ios objective-c uitableview uiviewcontroller


【解决方案1】:

如果您需要在键盘可见时允许用户在视图中拖动,那么您需要在 ScrollView 内完成所有布局,这将与您的 UITableView 方法一样工作。

如果您只需要向上移动并显示键盘后面的内容,并且不需要允许用户拖动视图的能力,那么您只需获取视图控制器的主视图(self.view)并重新分配它的框架。

例如self.view.frame = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y - keyboardHeight, self.view.frame.size.width, self.view.frame.size.height);

【讨论】:

  • 我可能需要允许用户在键盘启动时滚动视图,因此他们可能会选择其他 UITextField/UIButtons 等。我遇到了问题。我在我的 UIViewController 上放了一个 UIScrollView,然后在我的滚动视图中放了一个 UIView(称为 ContentView)。然后我在内容视图上放置了一个 UITextField。我无法单击 UITextField。当我尝试时,键盘不会出现。我已经取消选中 UIScrollView 的“延迟内容触摸”。见过这个吗?
  • 您在模拟器中运行?确保按 command+K 启用软键盘 - 有时它会默认设置并且不会显示软键盘,因为有物理键盘可用。
  • 无设备。我想我会制作一个快速视频。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-01
  • 2013-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多