问题标签 [uipresentationcontroller]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3475 浏览

ios - 为什么不使用 frameOfPresentedViewInContainerView 定义我的视图控制器大小使其大小?

我一直在关注本教程,了解如何在 iOS 8 中使用 实现自定义视图控制器转换,UIPresentationController到目前为止这一切都说得通,但我似乎无法让我的视图控制器大小合适。

在该教程中,他们具有以下代码:

我都明白了,除了frameOfPresentedViewInContainerView。这会返回一个大小,但是presentedView().frame = frameOfPresentedViewInContainerView(),如果我删除containerViewWillLayoutSubviews它就不起作用。为什么我必须有那条线?你会认为函数本身就足够了,否则我只会在containerViewWillLayoutSubviews方法中实现一个随机大小。

0 投票
1 回答
618 浏览

ios - 创建不占用全屏的 UIViewController 时,如何通过点击外部来关闭它?

我正在按照本教程制作一个覆盖视图控制器,frameOfPresentedViewInContainerView在 iOS 8 中使用,但我很好奇,我将如何根据在可见区域之外的点击来关闭这个视图控制器?

0 投票
3 回答
1929 浏览

iphone - 基于视图大小的自适应 UIPresentationController

我正在UIPresentationController为我的视图控制器转向基于演示文稿,但对 API 感到有些困惑。

我有一个自定义侧边栏样式视图控制器演示文稿(类似于LookInsideWWDC 2014 演示代码)。

此类集群(UIPresentationControllerUIViewControllerTransitioningDelegateUIViewControllerAnimatedTransitioning)在常规尺寸的类视图上将视图控制器呈现为屏幕边缘的侧边栏,并在紧凑尺寸的类视图上将相同的视图控制器呈现为全屏。

在 Resizable iPad 目标上进行测试显示了正确的行为:我将水平尺寸类设置为“紧凑”,并且我的视图控制器从侧边栏切换到全屏。

但是,我想要更多的粒度。当设备处于横向时,我想在 iPhone 6 和 6+ 上使用侧边栏样式的视图控制器演示,并为所有纵向的 iPhone 使用全屏样式演示。

所以在我的方法中

我实现了一些逻辑来检测侧边栏是否会占用过多的屏幕,假设我使用以下条件:

然而,这无济于事。状态的文档UIPresentationController.overrideTraitCollection

使用此属性来指定要应用于呈现和呈现视图控制器的任何特征。您指定的特征会覆盖当前对视图控制器有效的任何现有特征。此属性的默认值为 nil。

为该属性分配一个新值会导致演示控制器转换到新的特征集,这可能会导致呈现界面的动画。

将新值分配给呈现控制器不会导致我呈现的界面发生任何变化。(即使我指定了overrideTraitCollection从对象UIPresentationController内创建的时间UIViewControllerTransitioningDelegate。)

我错过了什么?UIPresentationController是否可以在更精细的级别上执行自适应演示?

0 投票
1 回答
2607 浏览

ios - 呈现后在 UIPresentationController 中调整呈现视图的框架

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

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

这工作完美,但直接修改框架感觉有点脏self.presentedViewsetNeedsLayout我尝试使用和的各种排列在容器视图上触发布局layoutIfNeeded,但除了直接设置其框架之外,没有什么会导致呈现的视图移动。

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

0 投票
1 回答
1388 浏览

ios - 为 iPhone 6 Plus 横向设置 UIModalPresentationStyle?

我想始终在所有设备和所有方向的弹出窗口中显示一个视图控制器。我试图通过采用UIPopoverPresentationControllerDelegateand 设置sourceViewand来实现这一点sourceRect。故事板中的 segue 被配置为 Present As Popover segue。这适用于所有设备和方向,除了 iPhone 6 Plus 横向。在这种情况下,视图控制器会在表单中从屏幕底部向上滑动。我怎样才能防止它总是出现在弹出窗口中?

0 投票
1 回答
1592 浏览

xcode - UIPopoverPresentationController

我是 swift 新手,并试图了解如何使用UIPopoverPresentationController.

我在我的应用程序中需要的是,当按下按钮时,屏幕按钮的弹出窗口将显示在屏幕的一半上,并带有一个xib文件。现在发生的事情是我设法继续使用第二个视图控制器,但不知道如何加载xib文件以及如何使弹出框成为按钮屏幕的一半。这是我的代码

0 投票
1 回答
507 浏览

objective-c - 在动画呈现控制器视图的同时动画呈现控制器视图

我有一个视图控制器,它在某些操作上呈现另一个覆盖屏幕下半部分的视图控制器。

当我从底部对第二个视图控制器(呈现视图控制器)进行动画处理以覆盖屏幕的下半部分时,我还希望将呈现视图动画到屏幕的上半部分。请参阅下面的代码 -

viewForKey:UITransitionContextFromViewKey回报nil。_ 我超越了shouldRemovePresentersViewNO的习惯UIPresentationController,但我仍然得到nil。我正在使用UIModalPresentationCustom作为我正在呈现的视图的模态呈现样式。

编辑:

我意识到我可以通过覆盖presentationTransitionWillBegin我的 custom 中的方法来为呈现视图设置动画来实现相同的效果UIPresentationController。但我想获得有关访问呈现视图控制器的答案。

编辑: 既然我找到了解决方案,请澄清我的问题:(1)这是预期的行为,即presentingViewController 在动画对象中将为零?

0 投票
1 回答
1256 浏览

swift - 当分离到从 NSObject 继承的自定义类时,TransitioningDelegate 不适用于 UIPresentationController

我使用自定义 UIPresentationController 来执行我自己的动画的续集。在prepareForSegue:

这是我的DBViewControllerTransitioningDelegate

它不起作用,因为没有调用方法。但是当我设置时:

并在我的self控制器中添加 2 种方法,DBViewControllerTransitioningDelegate一切都很好。这两种方法被调用。为什么?有什么区别?

0 投票
1 回答
3815 浏览

ios - 如何将 modalPresentationCapturesStatusBarAppearance = NO 与自定义 UIPresentationController 一起使用?

我有一个自定义 UIPresentationController 并覆盖 frameOfPresentedViewInContainerView 以进行自定义 viewController 演示。一切正常,除了状态栏。

我根本不希望状态栏改变外观——它应该保持原来的样子。现在Apple文档:https ://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/#//apple_ref/occ/instp/UIViewController/modalPresentationCapturesStatusBarAppearance说如果modalPresentationStyle不是UIModalPresentationFullScreen或modalPresentationCapturesStatusBarAppearance是NO,我应该没问题,状态栏不应该改变。

使用此代码:

我可以看到调用了 prefersStatusBarHidden,即使 modalPresentationCapturesStatusBarAppearance 为 NO(显示为 0)并且 modalPresentationStyle 为 UIModalPresentationCustom(显示为 4)。

显然,这就是在呈现 viewController 时状态栏发生变化的原因。

但为什么?

我对此的想法是,iOS 认为 viewController 以全屏显示,即使它不是。

我发现了 UIPresentationController 的属性 shouldPresentInFullscreen——它默认返回 YES。返回 NO 根本没有帮助,所以我不明白该属性甚至做了什么......它实际上没有任何效果。这同样适用于presentationStyle 属性——更改它时我看不到任何效果。我本来希望将presentationStyle 属性“重定向”到viewControllers modalPresentationStyle 属性,但它仍然保留在UIModalPresentationCustom,它必须首先启动自定义演示。

所以,我的问题是:有人知道如何使用自定义 UIPresentationController 保持状态栏不变——有人可以解释一下 shouldPresentInFullscreen 和presentationStyle 属性吗?

谢谢!:)

0 投票
1 回答
317 浏览

objective-c - 在两个不同的 UIPresentationController 之间进行适配

UIPresentationController根据当前的特征集合,我想在两个不同的 之间进行调整。例如,这两个控制器可以UIPopoverPresentationController用于任何特征,而自定义UIPresentationController用于紧凑的水平特征(例如 iPhone)。

不幸的是,这在最新的 iOS 8 中似乎是不可能的。特别是:

  • 您可以设置一个UIAdaptivePresentationControllerDelegate来换出演示风格,但只允许标准的全屏演示控制器。

  • 您可以在呈现视图控制器之前选择要使用的呈现控制器,但在呈现后,当特征集合发生变化时,这实际上并不能适应,例如在 iPad 多任务处理或方向变化中。

几个不同的解决方案尝试:TumblrIrace

有什么建议么?