【问题标题】:Change the distance a modal UIViewController shifts up when the keyboard appears更改键盘出现时模态 UIViewController 向上移动的距离
【发布时间】:2015-01-31 04:19:39
【问题描述】:

我有一个 UIViewController,我正在使用以下代码模态呈现:

FeedbackViewController *fvc=[[FeedbackViewController alloc] init];
fvc.delegate=self;
[fvc setModalPresentationStyle:UIModalPresentationFormSheet];
[self presentViewController:fvc animated:YES completion:nil];

当点击此模态视图中的 UITextField 时,会出现键盘,并且视图会动画大约 60 像素。为了确保我的文本字段可见,我希望视图向上移动 200 像素。我知道在处理多个字段时可以在 UIScrollView 中滑动视图,但我想知道对于这种简单的情况是否没有更直接的选项?

感谢阅读。

替代解决方案: 我找到了一个目前对我有用的解决方法。我的模态视图控制器现在是全屏的——本质上是一个半透明背景上的白框——并且我展示了没有动画的 ViewController。然后,在模态视图的 viewWillAppear 方法中,我淡入半透明背景并向上滑动白色框。当模态视图被解除时,相反的情况会发生。 (这具有易于响应的背景的额外好处,例如,“点击关闭”。)

【问题讨论】:

  • 有一个标志可以避免这种情况。

标签: ios objective-c ipad uiscrollview modalviewcontroller


【解决方案1】:

一个相当基本的解决方案:您可以从 NSNotificationCenter 订阅 UIKeyboardWillShowNotification 通知,当您收到该通知时,您可以通过以下方式转移您的视图:

self.viewToShift.frame = CGRectOffset(self.viewToShift.frame, 0, -100)

或者通过对框架或布局约束的任何其他操作来改变它的位置。您可能还想把它扔到 UIView 动画块中。

您还需要订阅“UIKeyboardWillHideNotification”,以便之后您可以回到原来的位置。

【讨论】:

  • 谢谢。我在使用这种方法时遇到的问题是,当用户点击文本字段时,已经有一个动画发生了——键盘正在动画大约 60 像素。在此动画发生时,调用视图框架上的任何代码似乎都没有任何效果。
  • 你正在使用布局约束?
  • 此视图未选择自动布局。另外,有趣的是,如果我对动画进行延迟,比如 +100 像素,当键盘第一次出现时,视图会立即偏移 -100 像素,然后在延迟后返回到“正常”位置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-28
  • 2018-05-21
  • 1970-01-01
相关资源
最近更新 更多