16

我正在使用自定义演示控制器来制作类似于UIAlertView. 我希望它在键盘显示时向上移动。在UIKeyboardWillShowNotification处理程序中,我抓取了新的键盘框架,将其存储在一个属性中,然后调用:

self.presentedView.frame = [wself frameOfPresentedViewInContainerView];

在我的实现中-frameOfPresentedViewInContainerView,我考虑了当前的键盘高度。

这工作完美,但直接修改框架感觉有点脏self.presentedViewsetNeedsLayout我尝试使用和的各种排列在容器视图上触发布局layoutIfNeeded,但除了直接设置其框架之外,没有什么会导致呈现的视图移动。

有没有比自己改变框架更好的方法来做到这一点?

4

1 回答 1

5

您需要更新preferredContentSize您提供的 VC。

演示控制器不知道演示完成后演示的 VC 的布局将如何以及何时更改。它只知道它的大小和执行转换所需的位置。

但是演示控制器有一个很好的委托方法继承自UIContentContainerpreferredContentSizeDidChange(forChildContentContainer container: UIContentContainer)

所以你应该做的是:

  1. 在提供的 VC 中执行所有布局更改
  2. 确保在preferredContentSize之后立即更新提供的 VC
  3. 您的演示控制器将收到通知
  4. 触发containerView演示控制器属性的 布局传递
于 2018-04-05T15:04:17.497 回答