我在运行时动态地将子视图添加到超级视图,并希望调整超级视图的大小以匹配子视图。调整大小可以正常工作,但是在添加子视图时不会居中。第二个视图似乎是在第一个视图结束的地方添加的。

这是多次调用的代码,并通过不同的subViews传递:

    self.currentConstraints = [
        NSLayoutConstraint(item: superView, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: subView.frame.size.height),
        NSLayoutConstraint(item: superView, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: subView.frame.size.width)
    ]

    superView.addConstraints(self.currentConstraints!)

    addChildViewController(viewController)
    superView.addSubview(viewController.view)


我可以使subView与setFrameOrigin一起移动,但是这会根据它们在开始时的错误位置将它们向上或向下移动。

最佳答案

我最终使用约束并在超级视图上使用setFrameSize进行了放弃。我之前跳过了这种方法,因为其中的弹出窗口没有调整大小,因此我只是将其设置为委托,并在添加新的子视图时调整其大小。

    superView.setFrameSize(subView.frame.size)

    self.delegate.subViewChanged(subView.frame.size)

    addChildViewController(viewController)
    superView.addSubview(viewController.view)

07-25 23:03
查看更多