将视图锚定到主视图时出现 AutoLayout 错误 - Swift
AutoLayout error when anchoring a view to main view - Swift
因为他们没有共同的祖先。约束或其锚点是否引用不同视图层次结构中的项目?
override func viewDidLoad() {
super.viewDidLoad()
let myContainer = UIView()
myContainer.backgroundColor = .purple
myContainer.translatesAutoresizingMaskIntoConstraints = false
myContainer.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
myContainer.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
myContainer.widthAnchor.constraint(equalToConstant: 200).isActive = true
myContainer.heightAnchor.constraint(equalToConstant: 200).isActive = true
self.view.addSubview(myContainer)
}
错误:
2019-11-06 20:06:17.763701-0600 Testing AutoLayout[42202:4013241] *** Terminating app due to uncaught exception 'NSGenericException', reason: 'Unable to activate constraint with anchors and because they have no common ancestor. Does the constraint or its anchors reference items in different view hierarchies? That's illegal.'
如果我注释以下两行,错误就会消失,myContainer
视图会显示在左上角。
//myContainer.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
//myContainer.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
知道为什么如果 'myContainer' 是我唯一的错误吗?
您应该在约束之前添加视图
let myContainer = UIView()
self.view.addSubview(myContainer)
myContainer.backgroundColor = .purple
myContainer.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
myContainer.centerYAnchor.constraint(equalTo: view.centerYAnchor),
myContainer.centerXAnchor.constraint(equalTo: view.centerXAnchor),
myContainer.widthAnchor.constraint(equalToConstant: 200),
myContainer.heightAnchor.constraint(equalToConstant: 200)
])
width 和 height 约束通过的原因是它们都添加到 view 本身 而 centerX 和 centerY 被添加到父视图。
首先,您应该在添加约束之前添加视图(一个或多个视图)。
override func viewDidLoad() {
super.viewDidLoad()
let myContainer = UIView()
self.view.addSubview(myContainer)
myContainer.backgroundColor = .ColorName
myContainer.translatesAutoresizingMaskIntoConstraints = false
addViewConstraints()
}
func addViewConstraints () {
NSLayoutConstraint.activate([
myContainer.centerYAnchor.constraint(equalTo: view.centerYAnchor),
myContainer.centerXAnchor.constraint(equalTo: view.centerXAnchor),
myContainer.widthAnchor.constraint(equalToConstant: 200),
myContainer.heightAnchor.constraint(equalToConstant: 200)
])
}
因为他们没有共同的祖先。约束或其锚点是否引用不同视图层次结构中的项目?
override func viewDidLoad() {
super.viewDidLoad()
let myContainer = UIView()
myContainer.backgroundColor = .purple
myContainer.translatesAutoresizingMaskIntoConstraints = false
myContainer.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
myContainer.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
myContainer.widthAnchor.constraint(equalToConstant: 200).isActive = true
myContainer.heightAnchor.constraint(equalToConstant: 200).isActive = true
self.view.addSubview(myContainer)
}
错误:
2019-11-06 20:06:17.763701-0600 Testing AutoLayout[42202:4013241] *** Terminating app due to uncaught exception 'NSGenericException', reason: 'Unable to activate constraint with anchors and because they have no common ancestor. Does the constraint or its anchors reference items in different view hierarchies? That's illegal.'
如果我注释以下两行,错误就会消失,myContainer
视图会显示在左上角。
//myContainer.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
//myContainer.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
知道为什么如果 'myContainer' 是我唯一的错误吗?
您应该在约束之前添加视图
let myContainer = UIView()
self.view.addSubview(myContainer)
myContainer.backgroundColor = .purple
myContainer.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
myContainer.centerYAnchor.constraint(equalTo: view.centerYAnchor),
myContainer.centerXAnchor.constraint(equalTo: view.centerXAnchor),
myContainer.widthAnchor.constraint(equalToConstant: 200),
myContainer.heightAnchor.constraint(equalToConstant: 200)
])
width 和 height 约束通过的原因是它们都添加到 view 本身 而 centerX 和 centerY 被添加到父视图。
首先,您应该在添加约束之前添加视图(一个或多个视图)。
override func viewDidLoad() {
super.viewDidLoad()
let myContainer = UIView()
self.view.addSubview(myContainer)
myContainer.backgroundColor = .ColorName
myContainer.translatesAutoresizingMaskIntoConstraints = false
addViewConstraints()
}
func addViewConstraints () {
NSLayoutConstraint.activate([
myContainer.centerYAnchor.constraint(equalTo: view.centerYAnchor),
myContainer.centerXAnchor.constraint(equalTo: view.centerXAnchor),
myContainer.widthAnchor.constraint(equalToConstant: 200),
myContainer.heightAnchor.constraint(equalToConstant: 200)
])
}