演示后在UIPresentationController中调整呈现视图的帧

Zev*_*erg 15 cocoa-touch uikit ios uipresentationcontroller

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

self.presentedView.frame = [wself frameOfPresentedViewInContainerView];
Run Code Online (Sandbox Code Playgroud)

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

这很有效,但self.presentedView直接修改框架感觉有点脏.我试图与不同排列的容器视图触发布局setNeedsLayoutlayoutIfNeeded,但没有引起呈现视图的不仅仅是直接设置它的框架移动等.

有没有更好的方法来做到这一点,而不仅仅是自己改变框架?

小智 5

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

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

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

所以你应该做的是:

  1. 在呈现的 VC 中执行所有布局更改
  2. 确保更新呈现VCpreferredContentSize右后
  3. 您的演示文稿控制器将收到通知
  4. 触发containerView演示控制器属性的 布局传递