在UIPresentationController中展示视图后,如何调整其显示框架

16

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

self.presentedView.frame = [wself frameOfPresentedViewInContainerView];
在我的实现中,我考虑了当前键盘的高度,来计算-frameOfPresentedViewInContainerView的应该位置。这个方法虽然可以完美地工作,但是直接修改self.presentedView的frame让人感觉有些不妥当。我尝试了各种组合的setNeedsLayoutlayoutIfNeeded方法来触发容器视图的布局,但除了直接设置其frame之外,没有任何其他方法使呈现的视图移动。
是否有更好的方法来避免直接修改frame呢?

嗨,Zev,你找到解决方案了吗?我正在尝试在按钮按下时更新我的presentedView的框架...这是否类似于你正在做的事情? - Mike
我没有找到更好的解决方案,只能坚持使用这个临时方法。你是在处理演示控制器,还是一般调整视图? - Zev Eisenberg
同样在一个演示控制器中,我想在用户执行操作时调整框架。最终直接修改了presentedView()方法,但感觉不太对 :) - Mike
同意。这将是一个很好的WWDC实验室问题。 - Zev Eisenberg
1
更新:我仍然没有比这里描述的更好的解决方法。 - Zev Eisenberg
1个回答

5
您需要更新您呈现的视图控制器的 preferredContentSize
在呈现完成后,演示控制器不知道呈现的视图控制器的布局何时以及如何更改。它只知道它的大小和执行过渡所需的位置。
但是,演示控制器有一个很好的委托方法,继承自 UIContentContainer preferredContentSizeDidChange(forChildContentContainer container: UIContentContainer) 因此,您应该做到以下几点:
  1. 在呈现的VC中执行所有布局更改
  2. 确保立即更新呈现的VC的 preferredContentSize
  3. 将通知您的演示控制器
  4. 触发演示控制器的 containerView 属性的布局传递

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接