【问题标题】:Adjust frame of presented view in UIPresentationController after presentation呈现后在 UIPresentationController 中调整呈现视图的框架
【发布时间】:2015-04-22 18:07:00
【问题描述】:

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

self.presentedView.frame = [wself frameOfPresentedViewInContainerView];

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

这个效果很好,但是直接修改self.presentedView的框架感觉有点脏。我尝试使用setNeedsLayoutlayoutIfNeeded 的各种排列在容器视图上触发布局,但除了直接设置其框架之外,没有什么会导致呈现的视图移动。

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

【问题讨论】:

  • 您好 Zev,您的经理找到解决方案了吗?我正在尝试在按下按钮时更新我的​​presentedView的框架...这与您正在做的事情相似吗?
  • 我没有找到更好的解决方案。只是坚持解决方法。您是否也在演示控制器中,或者只是在调整视图?
  • 也在演示控制器中,我想在用户执行操作时调整框架。最终修改了presentView()?直接..感觉不对:)
  • 同意。这将是一个很好的 WWDC 实验室问题。
  • 更新:我仍然没有比这里描述的更好的解决方法。

标签: ios cocoa-touch uikit uipresentationcontroller


【解决方案1】:

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

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

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

所以你应该做的是:

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

【讨论】:

    猜你喜欢
    • 2015-01-07
    • 2021-01-03
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-25
    • 1970-01-01
    • 2017-04-07
    相关资源
    最近更新 更多