- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个自定义的 UIStoryboardSegue,可以在 iOS12.* 中按需要工作。
目标 View Controller 之一是 UITabbarController:对于每个选项卡,我都有一个嵌入在导航 Controller 中的 Controller 。
不幸的是,对于 iOS13.*,这不能很好地工作: View Controller 生命周期被破坏,并且不再调用 viewXXXAppear() 和 willTransition() 方法。
看起来 makeKeyAndVisible() 没有效果?!
在底部查看屏幕 UI 在没有调用 viewWillAppear() 的情况下是如何困惑的。
一个可怕的临时解决方法
我不得不拉我的头发,但是,我找到了一个公开的修复程序(我必须即时添加导航 Controller )。
这弄乱了 vc 层次结构:你有更好的解决方案吗?
public class AladdinReplaceRootViewControllerSegue: UIStoryboardSegue {
override public func perform() {
guard let window = UIApplication.shared.delegate?.window as? UIWindow,
let sourceView = source.view,
let destinationView = destination.view else {
super.perform()
return
}
let screenWidth = UIScreen.main.bounds.size.width
let screenHeight = UIScreen.main.bounds.size.height
destinationView.frame = CGRect(x: 0, y: 0, width: screenWidth, height: screenHeight)
window.insertSubview(destinationView, aboveSubview: sourceView)
// **My fix**
if #available(iOS 13,*) {
// I introduced an invisible navigation controller starting in iOS13 otherwise, my controller attached to the tabbar thru a navigation, dont work correctly, no viewXAppearis called.
let navigationController = UINavigationController.init(rootViewController: self.destination)
navigationController.isNavigationBarHidden = true
window.rootViewController = navigationController
}
else {
window.rootViewController = self.destination
}
window.makeKeyAndVisible()
}
}
最佳答案
感谢 Unbalanced calls to begin/end appearance transitions with custom segue,我找到了解决方案
这里发生的事情是目标 View Controller 的创建和附加发生了两次,第一个发生得太快了。
所以你需要做的是:
public class AladdinReplaceRootViewControllerSegue: UIStoryboardSegue {
override public func perform() {
guard let window = UIApplication.shared.delegate?.window as? UIWindow,
let sourceView = source.view,
let destinationView = destination.view else {
super.perform()
return
}
let screenWidth = UIScreen.main.bounds.size.width
let screenHeight = UIScreen.main.bounds.size.height
let mock = createMockView(view: desination.view)
window.insertSubview(mock, aboveSubview: sourceView)
//DO SOME ANIMATION HERE< MIGHT NEED TO DO mock.alpha = 0
//after the animation is done:
window.rootViewController = self.destination
mock.removeFromSuperview()
}
func createMockView(view: UIView) -> UIImageView {
UIGraphicsBeginImageContextWithOptions(view.frame.size, true, UIScreen.main.scale)
view.drawHierarchy(in: view.bounds, afterScreenUpdates: true)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return UIImageView(image: image)
}
}
关于UIViewController 生命周期断了 iOS13,makeKeyAndVisible() 好像不能操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58360026/
我已将后台任务功能添加到我的应用程序中。这是我的应用委托(delegate) // AppDelegate.m - (BOOL)application:(UIApplication *)applica
我正在尝试注销并返回到登录 View Controller 。 所以我创建一个窗口,设置 rootViewController,然后设置 KeyAndVisible。 (不在 AppDelegate
makeKeyWindow 和 makeKeyAndVisible 这两个 UIWindow 方法有什么区别? 什么时候 UIWindow 会成为 keyWindow 但不可见? 最佳答案 Each
我有一个自定义的 UIStoryboardSegue,可以在 iOS12.* 中按需要工作。 目标 View Controller 之一是 UITabbarController:对于每个选项卡,我都有
如果我删除Exception BreakPoint,一切都会好的。但是当我添加Exception breakPoint进行调试时,出现了一些错误: self.window = [[UIWindow
我有一个最初为 iOS 6 编写的应用程序,但现在我希望它能在 iOS 7 上运行。我在 Xcode 5 中打开该项目并编辑了一些内容。它工作正常,除了一条错误消息,如 Need a root vie
我想知道在所有 iOS 应用程序中,我们必须为我们的 UIWindow 对象编写 makeKeyAndVisible。那么有没有一个例子,我们不希望我们的应用程序 makeKeyAndVisible。
我正在重新创建某种特定于我的应用的 UIAlertView,因此我将 UIWindow 子类化来执行此操作。该窗口被添加到 [UIApplication sharedApplication].wind
我有一个场景,我从主窗口的 rootViewController 呈现一个模态视图 Controller 。当它加载该模式的内容时,我正在切换到另一个加载窗口,我将其设置为关键且可见。 此窗口充当加载
在每个应用程序中, 总是写成[window makeKeyAndVisible]; makeKey 是什么意思? 最佳答案 关键窗口是将接收用户交互的窗口。 你可以看看这个: http://devel
我的应用程序运行良好,直到今天它开始崩溃: [self.window makeKeyAndVisible];在应用程序委托(delegate)中。 - (BOOL)application:(UIApp
我的要求是 UITabBarController 是 rootviewcontroller,在第一次启动应用程序时,我想显示 UINavCon 内的登录过程,我通过 presentViewContro
调试时出现以下错误,发现在此行之后,应用程序崩溃: [self.window makeKeyAndVisible]; 尝试通过 Xcode 8.0 在设备上运行时,出现以下错误日志: 2016-10-
我是一名优秀的程序员,十分优秀!