仅在插入断点时才有效的 iOS 抽屉 UI
Posted
技术标签:
【中文标题】仅在插入断点时才有效的 iOS 抽屉 UI【英文标题】:iOS Drawer UI that only works when breakpoint inserted 【发布时间】:2018-12-11 02:45:42 【问题描述】:在我添加自述文件中显示的断点之前,以下应用程序 Drawer Demo 无法正常工作。如果没有断点,UI 将无法完成填充,并且无法识别平移手势。有了断点,一切都按设计进行。
该应用程序有 2 个视图控制器:一个父 vc 和一个抽屉 vc,它被添加到父级:
override func viewDidLoad()
super.viewDidLoad()
let vc = UIStoryboard.init(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "BottomSheetViewController") as! DrawerViewController
vc.configureDrawer(containerView: drawerContainer, overlaidView: overlaidView)
drawerContainer.addSubview(vc.view)
解决方案 与断点无关,那只是侥幸。 @rob mayof 指出的问题是子视图控制器和父视图控制器未连接。正确的解决方案如下所示。供可能面临此问题的其他人参考,Apple 在https://developer.apple.com/library/archive/featuredarticles/ViewControllerPGforiPhoneOS/ImplementingaContainerViewController.html 中描述了实现这些问题的正确方法。
脚注 这个例子是为了在一个更大的项目中重现和隔离问题而开发的。在尝试这样做时,发现了这种意外行为并找到了解决方案。
【问题讨论】:
【参考方案1】:这是你的代码:
override func viewDidLoad()
super.viewDidLoad()
let vc = UIStoryboard.init(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "BottomSheetViewController") as! DrawerViewController
vc.configureDrawer(containerView: drawerContainer, overlaidView: overlaidView)
drawerContainer.addSubview(vc.view)
(下次请在您的问题中包含它。)
你必须通过建立父/子视图控制器关系告诉 UIKit 一个视图控制器的视图在另一个视图控制器的视图的层次结构中。因此,您需要添加以下几行:
override func viewDidLoad()
super.viewDidLoad()
let vc = UIStoryboard.init(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "BottomSheetViewController") as! DrawerViewController
addChildViewController(vc) // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
vc.configureDrawer(containerView: drawerContainer, overlaidView: overlaidView)
drawerContainer.addSubview(vc.view)
vc.didMove(toParentViewController: self) // <<<<<<<<<<<<<<<<<<<<<<<
【讨论】:
不知道。 Rob,我已根据您的建议编辑了问题,并添加了对 Apple 关于容器视图控制器的文档的引用。你今天教会了我一些东西。谢谢。以上是关于仅在插入断点时才有效的 iOS 抽屉 UI的主要内容,如果未能解决你的问题,请参考以下文章
Facebook SDK 3.2 登录仅在应用程序未终止时才有效
Cordova,onResume() 仅在我包含 alert() 时才有效
为啥 Thread.Abort 仅在 isBackground 属性设置为 true 时才有效?
Firebase 云消息传递的 getToken() 仅在我省略 usePublicVapidKey 方法时才有效,为啥?