UIStoryboardSegue 嵌入

Posted

技术标签:

【中文标题】UIStoryboardSegue 嵌入【英文标题】:UIStoryboardSegue embed 【发布时间】:2018-05-14 15:55:14 【问题描述】:

在界面构建器中的 UIView(添加为容器视图)中嵌入 segue 究竟是做什么的?我正在尝试以编程方式嵌入 ViewController,因为我想在两个不同的之间进行选择。我想我正确设置了容器视图的限制约束,因为当我在情节提要中添加带有嵌入 segue 的子视图控制器时,一切正常,但是一旦我使用以下代码嵌入它,视图控制器就会与底部约束重叠的容器视图,它弄乱了我的布局..

let viewController = UIStoryboard(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "MyViewController")
self.containerView.addSubview(viewController.view)
self.addChildViewController(viewController)
NSLayoutConstraint.activate([
    viewController.view.leadingAnchor.constraint(equalTo: containerView.leadingAnchor),
    viewController.view.trailingAnchor.constraint(equalTo: containerView.trailingAnchor),
    viewController.view.topAnchor.constraint(equalTo: containerView.topAnchor),
    viewController.view.bottomAnchor.constraint(equalTo: containerView.bottomAnchor)
])

viewController.didMove(toParentViewController: self)

【问题讨论】:

参考***.com/questions/28852338/… 【参考方案1】:

感谢@Dinesh Balasubramanian,我现在得到了以下代码:

let viewController = UIStoryboard(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "MyViewController")
self.containerView.addSubview(viewController.view)
self.addChildViewController(viewController)
viewController.view.frame = containerView.bounds
viewController.didMove(toParentViewController: self)

【讨论】:

不清楚为什么这会比您最初提供的代码更好。自动布局是定位子视图比设置其frame 更好的方法,因此您原始问题中的代码更好。 嗯,这取决于“作品”的概念。如果containerView 的框架发生变化,您的viewController.view 将被留下。最好更具体地说明原始代码有什么问题。顺便说一句,它有一个问题是您以错误的顺序调用addChildViewControlleraddSubview(尽管我怀疑这是问题的原因)。

以上是关于UIStoryboardSegue 嵌入的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Mongoose 的嵌入式文档中检索数组的最后一个对象?

程序化嵌入 segue

使用自定义动画删除自定义 UIStoryboardSegue

如何“取消” UIStoryBoardSegue

UIStoryboardSegue:动画期间不显示视图

UIStoryBoardSegue 方法的 iOS Swift 问题