作为未来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))
}
答案 0 :(得分:0)
这一行,
tvc2.view.setTranslatesAutoresizingMaskIntoConstraints(false)
应该取消注释。以编程方式添加视图,并且您正在使用约束时,应始终将其设置为false。另一方面,对于控制器的主视图,不应将其设置为false。
此外,宽度约束,因为它只适用于tvc2,应该添加到tvc2,而不是self.view(虽然它应该以任何方式工作)。
您也有点奇怪,您使用框架添加一个视图,另一个使用约束。使用相同的范例做两者会更好。