Ios 演示后,在UIPresentationController中调整演示视图的框架

Ios 演示后,在UIPresentationController中调整演示视图的框架,ios,cocoa-touch,uikit,uipresentationcontroller,Ios,Cocoa Touch,Uikit,Uipresentationcontroller,我正在使用自定义演示控制器制作类似于UIAlertView的东西。我希望它在键盘显示时向上移动。在UIKeyboardWillShowNotification处理程序中,我抓取新的键盘框,将其存储在属性中,然后调用: self.presentedView.frame=[wself frameofpresentedview-containerview]; 在我实现的-frameofPresentedViewContainerView中,我考虑了当前的键盘高度 这很好,但是直接修改self.pre

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

self.presentedView.frame=[wself frameofpresentedview-containerview];
在我实现的
-frameofPresentedViewContainerView
中,我考虑了当前的键盘高度

这很好,但是直接修改self.presentedView的框架感觉有点脏。我尝试在容器视图上使用各种排列方式触发布局,如
setNeedsLayout
layoutIfNeeded
,但除了直接设置其框架外,没有任何东西会导致显示的视图移动


有没有比自己修改框架更好的方法呢?

你需要更新你的VC的
首选内容大小

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

但是表示控制器有一个很好的委托方法,它继承自
UIContentContainer
preferredcontentsizeddchange(forChildContentContainer:UIContentContainer)

所以你应该做的是:

  • 在呈现的VC中,执行所有布局更改
  • 确保在之后立即更新呈现的VC
    preferredContentSize
  • 将通知您的演示控制器
  • 触发演示控制器的
    containerView
    属性的布局传递

  • 嗨,泽夫,你找到解决方案了吗?我正在尝试通过按按钮更新演示视图的框架。。。这和你正在做的类似吗?我没有找到更好的解决办法。只是被困在解决方法中。您是否也在演示控制器中,或者只是在一般情况下调整视图?同样在演示控制器中,我希望在用户执行操作时调整帧。。最终修改了presentedView()?直接。。感觉不对:)同意。这将是一个很好的WWDC实验室问题。更新:我仍然没有比这里描述的更好的解决方法。