gpt4 book ai didi

ios - 如何使用 Swift 在 iOS 8 中正确添加 subview Controller

转载 作者:搜寻专家 更新时间:2023-10-31 08:11:02 24 4
gpt4 key购买 nike

我一直在浏览文档,但似乎仍处于症结所在。

我有一个 View Controller 对象 C_SelectPhoto。这有一个容器 View 。在容器 View 中,我希望将 subview Controller C_SelectPhotoControllerView 放入其中。它只是一系列照片。但是,设置框架和添加 subview Controller 不起作用。如果我移动所需 subview Controller 的 x 值,则不会发生任何效果。

为了弄清楚发生了什么,我对所有内容进行了颜色编码。下面的容器是橙色的。根据 Storyboard,容器期望的 View 是黄色的。我实际上想要适应的 View 是红色的。

这是 Storyboard:

enter image description here

这是我的 C_SelectPhoto Controller 代码

class C_SelectPhoto:Controller
{
@IBOutlet weak var selectPhotoControllerView: UIView!
var _collectionViewController:C_SelectPhotoControllerView!

//TODO PERMISSION IS NEEDED BEFORE FETCHING
func initController()
{
_collectionViewController = Controller.STORYBOARD.instantiateViewControllerWithIdentifier("selectPhotoControllerView") as C_SelectPhotoControllerView
displayControllerViewController()
}

//show the photo selection
private func displayControllerViewController()
{
addChildViewController(_collectionViewController)
_collectionViewController.view.frame = CGRectMake(100, 0, 500, 500)
self.view.addSubview(_collectionViewController.view)
_collectionViewController.didMoveToParentViewController(self)
}
}

然而,生成的结果如下: enter image description here

首先,根本不应该添加黄色类,我只想要红色(UICollectionViewController 类)。其次,我可以看出红色类被添加到错误的位置,因为它的 x 值根本没有移动它。

所以我的问题是:如何将 UIContainerViewController 作为主视图 Controller C_SelectPhoto 的子项添加,但让 UIContainerViewController 框架适合我在主视图 Controller 中的容器?

谢谢!!!

注意:我要添加的 View 是 UICollectionViewControllers。当我添加一个 UIViewController 时,框架工作得很好,但正如您在添加 UICollectionViewController 时看到的那样,框架不起作用,它们被添加到随机偏移并且不尊重我尝试使用框架分配调整它们的大小。

最佳答案

使用以下扩展在 View 上添加 childViewController

extension UIViewController {   
func configureChildViewController(childController: UIViewController, onView: UIView?) {
var holderView = self.view
if let onView = onView {
holderView = onView
}
addChildViewController(childController)
holderView.addSubview(childController.view)
constrainViewEqual(holderView, view: childController.view)
childController.didMoveToParentViewController(self)
childController.willMoveToParentViewController(self)
}


func constrainViewEqual(holderView: UIView, view: UIView) {
view.translatesAutoresizingMaskIntoConstraints = false
//pin 100 points from the top of the super
let pinTop = NSLayoutConstraint(item: view, attribute: .Top, relatedBy: .Equal,
toItem: holderView, attribute: .Top, multiplier: 1.0, constant: 0)
let pinBottom = NSLayoutConstraint(item: view, attribute: .Bottom, relatedBy: .Equal,
toItem: holderView, attribute: .Bottom, multiplier: 1.0, constant: 0)
let pinLeft = NSLayoutConstraint(item: view, attribute: .Left, relatedBy: .Equal,
toItem: holderView, attribute: .Left, multiplier: 1.0, constant: 0)
let pinRight = NSLayoutConstraint(item: view, attribute: .Right, relatedBy: .Equal,
toItem: holderView, attribute: .Right, multiplier: 1.0, constant: 0)

holderView.addConstraints([pinTop, pinBottom, pinLeft, pinRight])
}}

关于ios - 如何使用 Swift 在 iOS 8 中正确添加 subview Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26599858/

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