首页 > 解决方案 > 是否有可能拥有一个大小与其 Sub-Stackview 大小相同的 ContainerView?

问题描述

我想保持我的代码模块化,所以我有一个指向子视图控制器的 ContainerView。我希望 ContainerView 的大小根据子控制器中视图的大小而改变在此处输入图像描述在更简单的情况下,在上图中,如果我使用 StackView,如果堆栈视图的子视图之一是,我可以让父紫色视图调整大小隐藏或两者兼而有之。

我希望容器视图(在图片中显示为灰色视图)发生同样的事情,如果包含的堆栈视图调整大小,则父容器视图的大小也会调整。我对 containerView 确实有相等的高度约束。但是,它似乎不起作用,我不确定它是否可能。我希望它调整大小,因为它会阻止点击底层视图。

我相信它与这个问题相似但又足够不同,因为我们正在谈论堆栈视图。,Child ViewController to resize containerView

标签: iosswiftautolayoutuikit

解决方案


是的,这是可能的。

1 - 给出你的UIContainerView顶部、前导和尾随约束

2 - 给你UIContainerView一个高度约束,其中Priority: Low (250)...将被通过代码添加的新约束“覆盖”。

3 - 根据需要设置您的子视图控制器......在这个简单的情况下,将堆栈视图约束到所有 4 个侧面

4 - 加载子视图后,.translatesAutoresizingMaskIntoConstraints = false在其上设置.view,然后将所有 4 面的约束添加到容器视图

假设您正确配置了所有约束,容器视图的高度将由其子视图(子 VC 的视图)确定。

示例代码:

class AutoSizeContainerViewController: UIViewController {

    @IBOutlet var theContainerView: UIView!

    // so we can reference the embedded VC
    var subVC: SubViewController?

    // this executes before viewDidLoad()
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let vc = segue.destination as? SubViewController {
            self.subVC = vc
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        // make sure subVC was set correctly
        if let vc = self.subVC {
            // constrain child VC's view to container view
            vc.view.translatesAutoresizingMaskIntoConstraints = false
            NSLayoutConstraint.activate([
                vc.view.topAnchor.constraint(equalTo: theContainerView.topAnchor),
                vc.view.leadingAnchor.constraint(equalTo: theContainerView.leadingAnchor),
                vc.view.trailingAnchor.constraint(equalTo: theContainerView.trailingAnchor),

                // this will keep the container view's bottom equal to the child VC's view content
                theContainerView.bottomAnchor.constraint(equalTo: vc.view.bottomAnchor, constant: 0.0),
            ])
        }

    }

}

我在这里发布了一个完整的示例项目:https ://github.com/DonMag/AutosizeContainer


推荐阅读