gpt4 book ai didi

ios - 如何进行布局以处理 iOS 8 中自定义呈现的 View Controller 的通话中(双高)状态栏?

转载 作者:技术小花猫 更新时间:2023-10-29 10:53:09 26 4
gpt4 key购买 nike

在 iOS 7 中,我能够通过添加约束来处理自定义呈现 View Controller 的布局,同时考虑通话状态栏,其中呈现 View Controller 与呈现 View Controller 具有相同的中心和相同的宽度和高度 View Controller 。这比对宽度和高度使用自动调整大小更可取,因为否则,当通话状态栏消失时,呈现的 View Controller 将出于某种原因从顶部向下推 20 点。

然而,在 iOS 8 中,这个技巧不再有效。一方面,我通过实验发现呈现 View Controller 似乎不一定在容器 View 中,所以我无法将那些约束添加到容器 View 中。 (对于 sample code"A Look Inside Presentation Controllers" 2014 WWDC video 并没有将呈现 View Controller 放在那里。)似乎让呈现 View Controller 使用自动布局或自动调整大小填充容器 View 是可行的,但我发现当通话中状态栏消失时,容器 View 本身可能会保持下推 20 点(这在 iOS 7 中不是这种情况)。

我一直在研究 "A Look Inside Presentation Controllers" sample code ,但即使是这段代码也不能正确处理通话中的状态栏。 (顺便说一句,我仍在尝试掌握新的 UIPresentationController API。)

最佳答案

对我有用的是为 UIApplicationWillChangeStatusBarFrameNotification 添加观察者,然后找到 transitionContext.containerView() 并更新框架。我在 View 调试时注意到,当返回到正常状态栏高度时,transitionContext.containerView() 框架没有更新。

func willChangeStatusBarFrame(notification: NSNotification)
{
if let userInfo = notification.userInfo
{
if let value = userInfo[UIApplicationStatusBarFrameUserInfoKey] as? NSValue
{
let statusBarFrame = value.CGRectValue()
let transitionView = UIApplication.sharedApplication().delegate!.window!!.subviews.last! as UIView
var frame = transitionView.frame
frame.origin.y = statusBarFrame.height-20
frame.size.height = UIScreen.mainScreen().bounds.height-frame.origin.y
UIView.animateWithDuration(0.35) {
transitionView.frame = frame
}
}
}
}

关于ios - 如何进行布局以处理 iOS 8 中自定义呈现的 View Controller 的通话中(双高)状态栏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25882609/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com