我正在使用自定义演示 Controller 制作类似于 UIAlertView
的内容。我希望它在键盘显示时向上移动。在 UIKeyboardWillShowNotification
处理程序中,我获取新的键盘框架,将其存储在一个属性中,然后调用:
self.presentedView.frame = [wself frameOfPresentedViewInContainerView];
在我的 -frameOfPresentedViewInContainerView
实现中,我考虑了当前的键盘高度。
这很完美,但是直接修改 self.presentedView
的框架感觉有点脏。我尝试使用 setNeedsLayout
和 layoutIfNeeded
的各种排列在容器 View 上触发布局,但除了直接设置其框架外,没有任何东西会导致呈现的 View 移动。
有比自己更改框架更好的方法吗?
最佳答案
您需要更新您提供的 VC 的 preferredContentSize
。
呈现 Controller 不知道在呈现完成后呈现的 VC 的布局将如何以及何时发生变化。它只知道它的大小和执行转换所需的位置。
但是表示 Controller 有一个很好的委托(delegate)方法继承自UIContentContainer
:preferredContentSizeDidChange(forChildContentContainer container: UIContentContainer)
那么你应该做的是:
- 在呈现的 VC 中执行所有布局更改
- 确保在之后立即更新呈现的 VC
preferredContentSize
- 您的演示 Controller 将收到通知
- 触发演示 Controller 的
containerView
属性的布局传递
关于ios - 演示后在 UIPresentationController 中调整呈现 View 的框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29805629/