问题标签 [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.
ios - 为什么不使用 frameOfPresentedViewInContainerView 定义我的视图控制器大小使其大小?
我一直在关注本教程,了解如何在 iOS 8 中使用 实现自定义视图控制器转换,UIPresentationController
到目前为止这一切都说得通,但我似乎无法让我的视图控制器大小合适。
在该教程中,他们具有以下代码:
我都明白了,除了frameOfPresentedViewInContainerView
。这会返回一个大小,但是presentedView().frame = frameOfPresentedViewInContainerView()
,如果我删除containerViewWillLayoutSubviews
它就不起作用。为什么我必须有那条线?你会认为函数本身就足够了,否则我只会在containerViewWillLayoutSubviews
方法中实现一个随机大小。
ios - 创建不占用全屏的 UIViewController 时,如何通过点击外部来关闭它?
我正在按照本教程制作一个覆盖视图控制器,frameOfPresentedViewInContainerView
在 iOS 8 中使用,但我很好奇,我将如何根据在可见区域之外的点击来关闭这个视图控制器?
iphone - 基于视图大小的自适应 UIPresentationController
我正在UIPresentationController
为我的视图控制器转向基于演示文稿,但对 API 感到有些困惑。
我有一个自定义侧边栏样式视图控制器演示文稿(类似于LookInside
WWDC 2014 演示代码)。
此类集群(UIPresentationController
、UIViewControllerTransitioningDelegate
和UIViewControllerAnimatedTransitioning
)在常规尺寸的类视图上将视图控制器呈现为屏幕边缘的侧边栏,并在紧凑尺寸的类视图上将相同的视图控制器呈现为全屏。
在 Resizable iPad 目标上进行测试显示了正确的行为:我将水平尺寸类设置为“紧凑”,并且我的视图控制器从侧边栏切换到全屏。
但是,我想要更多的粒度。当设备处于横向时,我想在 iPhone 6 和 6+ 上使用侧边栏样式的视图控制器演示,并为所有纵向的 iPhone 使用全屏样式演示。
所以在我的方法中
我实现了一些逻辑来检测侧边栏是否会占用过多的屏幕,假设我使用以下条件:
然而,这无济于事。状态的文档UIPresentationController.overrideTraitCollection
:
使用此属性来指定要应用于呈现和呈现视图控制器的任何特征。您指定的特征会覆盖当前对视图控制器有效的任何现有特征。此属性的默认值为 nil。
为该属性分配一个新值会导致演示控制器转换到新的特征集,这可能会导致呈现界面的动画。
将新值分配给呈现控制器不会导致我呈现的界面发生任何变化。(即使我指定了overrideTraitCollection
从对象UIPresentationController
内创建的时间UIViewControllerTransitioningDelegate
。)
我错过了什么?UIPresentationController
是否可以在更精细的级别上执行自适应演示?
ios - 呈现后在 UIPresentationController 中调整呈现视图的框架
我正在使用自定义演示控制器来制作类似于UIAlertView
. 我希望它在键盘显示时向上移动。在UIKeyboardWillShowNotification
处理程序中,我抓取了新的键盘框架,将其存储在一个属性中,然后调用:
在我的实现中-frameOfPresentedViewInContainerView
,我考虑了当前的键盘高度。
这工作完美,但直接修改框架感觉有点脏self.presentedView
。setNeedsLayout
我尝试使用和的各种排列在容器视图上触发布局layoutIfNeeded
,但除了直接设置其框架之外,没有什么会导致呈现的视图移动。
有没有比自己改变框架更好的方法来做到这一点?
ios - 为 iPhone 6 Plus 横向设置 UIModalPresentationStyle?
我想始终在所有设备和所有方向的弹出窗口中显示一个视图控制器。我试图通过采用UIPopoverPresentationControllerDelegate
and 设置sourceView
and来实现这一点sourceRect
。故事板中的 segue 被配置为 Present As Popover segue。这适用于所有设备和方向,除了 iPhone 6 Plus 横向。在这种情况下,视图控制器会在表单中从屏幕底部向上滑动。我怎样才能防止它总是出现在弹出窗口中?
xcode - UIPopoverPresentationController
我是 swift 新手,并试图了解如何使用UIPopoverPresentationController
.
我在我的应用程序中需要的是,当按下按钮时,屏幕按钮的弹出窗口将显示在屏幕的一半上,并带有一个xib文件。现在发生的事情是我设法继续使用第二个视图控制器,但不知道如何加载xib文件以及如何使弹出框成为按钮屏幕的一半。这是我的代码
objective-c - 在动画呈现控制器视图的同时动画呈现控制器视图
我有一个视图控制器,它在某些操作上呈现另一个覆盖屏幕下半部分的视图控制器。
当我从底部对第二个视图控制器(呈现视图控制器)进行动画处理以覆盖屏幕的下半部分时,我还希望将呈现视图动画到屏幕的上半部分。请参阅下面的代码 -
viewForKey:UITransitionContextFromViewKey
回报nil
。_ 我超越了shouldRemovePresentersView
我NO
的习惯UIPresentationController
,但我仍然得到nil
。我正在使用UIModalPresentationCustom
作为我正在呈现的视图的模态呈现样式。
编辑:
我意识到我可以通过覆盖presentationTransitionWillBegin
我的 custom 中的方法来为呈现视图设置动画来实现相同的效果UIPresentationController
。但我想获得有关访问呈现视图控制器的答案。
编辑: 既然我找到了解决方案,请澄清我的问题:(1)这是预期的行为,即presentingViewController 在动画对象中将为零?
swift - 当分离到从 NSObject 继承的自定义类时,TransitioningDelegate 不适用于 UIPresentationController
我使用自定义 UIPresentationController 来执行我自己的动画的续集。在prepareForSegue:
这是我的DBViewControllerTransitioningDelegate
:
它不起作用,因为没有调用方法。但是当我设置时:
并在我的self
控制器中添加 2 种方法,DBViewControllerTransitioningDelegate
一切都很好。这两种方法被调用。为什么?有什么区别?
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 属性吗?
谢谢!:)
objective-c - 在两个不同的 UIPresentationController 之间进行适配
UIPresentationController
根据当前的特征集合,我想在两个不同的 之间进行调整。例如,这两个控制器可以UIPopoverPresentationController
用于任何特征,而自定义UIPresentationController
用于紧凑的水平特征(例如 iPhone)。
不幸的是,这在最新的 iOS 8 中似乎是不可能的。特别是:
您可以设置一个
UIAdaptivePresentationControllerDelegate
来换出演示风格,但只允许标准的全屏演示控制器。您可以在呈现视图控制器之前选择要使用的呈现控制器,但在呈现后,当特征集合发生变化时,这实际上并不能适应,例如在 iPad 多任务处理或方向变化中。
有什么建议么?