在不同的视图控制器视图之间添加自动布局约束

时间:2015-02-12 03:44:04

标签: ios swift autolayout

作为未来UI的学术练习,我试图在两个表视图之间添加约束,这两个表视图属于根控制器的两个不同的子视图控制器。在我下面的RootViewController类中,tvc在400x500帧中按预期显示,但tvc2正在消耗整个帧而不是tvc右侧的400x500帧。基本上,限制显然被忽略了。我在风景中使用iPad sim。

override func viewDidLoad() {
    super.viewDidLoad()
    let v = self.view
    v.backgroundColor = UIColor.greenColor()

    var tvc :OrderTableViewController = OrderTableViewController(style: UITableViewStyle.Plain)
    var tvc2 :OrderTableViewController = OrderTableViewController(style: UITableViewStyle.Plain)

    self.addChildViewController(tvc)
    self.addChildViewController(tvc2)

    v.addSubview(tvc.view)
    v.addSubview(tvc2.view)

    tvc.didMoveToParentViewController(self)
    tvc2.didMoveToParentViewController(self)

    //tvc.view.setTranslatesAutoresizingMaskIntoConstraints(false)
    //tvc2.view.setTranslatesAutoresizingMaskIntoConstraints(false)
    //self.view.setTranslatesAutoresizingMaskIntoConstraints(false)


    tvc.view.frame = CGRectMake(0, 0, 400, 500)

    self.view.addConstraint(NSLayoutConstraint(
        item: tvc2.view,
        attribute: .Top,
        relatedBy: .Equal,
        toItem: tvc.view,
        attribute: .Top,
        multiplier: 1, constant: 0))
    self.view.addConstraint(NSLayoutConstraint(
        item: tvc2.view,
        attribute: .Bottom,
        relatedBy: .Equal,
        toItem: tvc.view,
        attribute: .Bottom,
        multiplier: 1, constant: 0))
    self.view.addConstraint(NSLayoutConstraint(
        item: tvc2.view,
        attribute: .Width,
        relatedBy: .Equal,
        toItem: nil,
        attribute: .NotAnAttribute,
        multiplier: 1, constant: 400))
    self.view.addConstraint(NSLayoutConstraint(
        item: tvc2.view,
        attribute: .Left,
        relatedBy: .Equal,
        toItem: tvc.view,
        attribute: .Right,
        multiplier: 1, constant: 0))

}

1 个答案:

答案 0 :(得分:0)

这一行,

tvc2.view.setTranslatesAutoresizingMaskIntoConstraints(false)

应该取消注释。以编程方式添加视图,并且您正在使用约束时,应始终将其设置为false。另一方面,对于控制器的主视图,不应将其设置为false。

此外,宽度约束,因为它只适用于tvc2,应该添加到tvc2,而不是self.view(虽然它应该以任何方式工作)。

您也有点奇怪,您使用框架添加一个视图,另一个使用约束。使用相同的范例做两者会更好。