尝试以编程方式实现约束时忽略约束
Posted
技术标签:
【中文标题】尝试以编程方式实现约束时忽略约束【英文标题】:Constraints were ignored when trying to implement constraints programmatically 【发布时间】:2017-07-02 07:31:59 【问题描述】:我试图通过设置约束使logoImage
水平和垂直居中,但在测试时,它显示在(x:0, y:0)
上。
知道如何解决这个问题吗?
谢谢
var movieView : UIView?
let logoImage = UIImageView(image: #imageLiteral(resourceName: "my_logo"))
// This function runs in viewWillAppear
internal func setupIntroMovie()
movieView = UIView(frame: view.frame)
view.addSubview(movieView!)
view.addSubview(logoImage)
let horizontalConstraint = NSLayoutConstraint(item: logoImage,
attribute: .centerX,
relatedBy: .equal,
toItem: view,
attribute: .centerX,
multiplier: 1,
constant: 0)
let verticalConstraint = NSLayoutConstraint(item: logoImage,
attribute: .centerY,
relatedBy: .equal,
toItem: view,
attribute: .centerY,
multiplier: 1,
constant: 0)
view.addConstraints([horizontalConstraint,
verticalConstraint])
updateViewConstraints()
【问题讨论】:
“错误”这个词太模糊了。在哪一行,完整的错误是什么? 什么“不起作用”?它没有像您期望的那样出现在屏幕上吗?应用程序崩溃了吗?日志中有警告吗? @Mr.Xcoder 抱歉,我忘了修正标题。它没有给我任何错误 @Slowpoke 那么问题出在哪里?它们是否以意想不到的方式出现在屏幕上? 【参考方案1】:您需要设置logoImage.translatesAutoresizingMaskIntoConstraints = false
,因为它决定视图的自动调整大小掩码是否转换为自动布局约束。
internal func setupIntroMovie()
movieView = UIView(frame: view.frame)
view.addSubview(movieView!)
view.addSubview(logoImage)
let horizontalConstraint = NSLayoutConstraint(item: logoImage,
attribute: .centerX,
relatedBy: .equal,
toItem: view,
attribute: .centerX,
multiplier: 1,
constant: 0)
let verticalConstraint = NSLayoutConstraint(item: logoImage,
attribute: .centerY,
relatedBy: .equal,
toItem: view,
attribute: .centerY,
multiplier: 1,
constant: 0)
// Update
logoImage.translatesAutoresizingMaskIntoConstraints = false
view.addConstraints([horizontalConstraint,
verticalConstraint])
updateViewConstraints()
如果该属性的值为真,系统会创建一组 复制视图指定行为的约束 自动调整蒙版。这也允许您修改视图的大小和 使用视图的 frame 、 bounds 或 center 属性定位, 允许您在 Auto 中创建静态的、基于框架的布局 布局。
【讨论】:
以上是关于尝试以编程方式实现约束时忽略约束的主要内容,如果未能解决你的问题,请参考以下文章
约束布局中以编程方式添加的按钮将忽略约束 - Android
以编程方式添加 UIConstraints 时不应用尾随约束