ios - 演示后在 UIPresentationController 中调整呈现 View 的框架

标签 ios cocoa-touch uikit uipresentationcontroller

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

self.presentedView.frame = [wself frameOfPresentedViewInContainerView];

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

这很完美,但是直接修改 self.presentedView 的框架感觉有点脏。我尝试使用 setNeedsLayoutlayoutIfNeeded 的各种排列在容器 View 上触发布局,但除了直接设置其框架外,没有任何东西会导致呈现的 View 移动。

有比自己更改框架更好的方法吗?

最佳答案

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

呈现 Controller 不知道在呈现完成后呈现的 VC 的布局将如何以及何时发生变化。它只知道它的大小和执行转换所需的位置。

但是表示 Controller 有一个很好的委托(delegate)方法继承自UIContentContainer:preferredContentSizeDidChange(forChildContentContainer container: UIContentContainer)

那么你应该做的是:

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

关于ios - 演示后在 UIPresentationController 中调整呈现 View 的框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29805629/

相关文章:

ios - 来自 iOS App 新帖子的 XMLRPC

ios - 需要过滤来自 URL 的结果

iphone - UITableView 在 iOS7 beta 4 上与状态栏重叠

ios - 是否可以将Unity与UIKit混合使用?

UIView的frame、bounds、center、origin,什么时候用什么?

ios - 垂直 ScrollView 与垂直导航冲突

android - 如何在我的应用程序中跟踪自然用户与付费广告 Facebook 用户?

ios - 使用 UIImagePickerController 从照片库中访问相机

iphone - 像通讯录和 Facebook 应用中的照片按钮

iphone - 关闭 iOS 中的默认旋转动画