【问题标题】:Swift - Stretched UIImageView from programmatically constraintsSwift - 从编程约束中拉伸 UIImageView
【发布时间】:2015-03-10 09:33:55
【问题描述】:
class Cell:UITableViewCell {
   var myImage:UIImageView = UIImageView()
   override init(style: UITableViewCellStyle, reuseIdentifier: String!) {
        myImage.setTranslatesAutoresizingMaskIntoConstraints(false)
        contentView.addSubview(userImage)
        let viewsDict = ["contentView":contentView,"myImage":myImage]
        contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:[contentView(100)]", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDict))
        contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-30-[myImage]", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDict))
        contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-[myImage]-|", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDict))
   }
}

这是我的代码,我想将 myImage 放在中心 - 垂直,但是当我添加 V:|-[myImage]-| 时,它会被拉伸。我试过V:|-[myImage(50)]-|,但它没有垂直居中,我收到一个错误:

2015-01-12 17:02:37.988 myApp[17463:1493388] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0x7a197470 V:[UITableViewCellContentView:0x7a1953d0(100)]>",
    "<NSLayoutConstraint:0x7a1982f0 UIImageView:0x7a194bc0.top == UITableViewCellContentView:0x7a1953d0.topMargin>",
    "<NSLayoutConstraint:0x7a198360 V:[UIImageView:0x7a194bc0(50)]>",
    "<NSLayoutConstraint:0x7a198320 UITableViewCellContentView:0x7a1953d0.bottomMargin == UIImageView:0x7a194bc0.bottom>"
)

我在 Cell 类和 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) 中尝试过 myImage.clipsToBounds = true,但这不影响拉伸...需要帮助.. :D

【问题讨论】:

    标签: ios swift layout uiimageview constraints


    【解决方案1】:

    您可以做的一件事是传入一个度量字典:

     let metrics = ["imageWidth":self.imageView.frame.width, "borderSpacing": 30]
    

    然后将其传递给约束:

    contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-[myImage(imageWidth)]-|", options: NSLayoutFormatOptions(0), metrics: metrics, views: viewsDict))
    

    接下来,您要将此优先级设置为 required (1000),然后将其他优先级设置为

    contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-(>=borderSpacing@999)-[myImage(imageWidth@1000)]-(>=borderSpacing@999)-|", options: NSLayoutFormatOptions(0), metrics: metrics, views: viewsDict))
    

    这都是概念性的。我没有测试这段代码。祝你好运。

    【讨论】:

    • 不,它不工作图像停留在 contentView 的顶部,我收到一个错误:Unable to simultaneously satisfy constraints."&lt;NSLayoutConstraint:0x7a197470 V:[UITableViewCellContentView:0x7a1953d0(100)]&gt;", "&lt;NSLayoutConstraint:0x7a1982f0 UIImageView:0x7a194bc0.top == UITableViewCellContentView:0x7a1953d0.topMargin&gt;", "&lt;NSLayoutConstraint:0x7a198360 V:[UIImageView:0x7a194bc0(50)]&gt;", "&lt;NSLayoutConstraint:0x7a198320 UITableViewCellContentView:0x7a1953d0.bottomMargin == UIImageView:0x7a194bc0.bottom&gt;"
    【解决方案2】:

    试试这个 - 我很难弄清楚是什么限制导致了这个错误。这是一种更简单的方法。

    我使用的是 Xcode 6.1.1

    “Command + A”选择所有UILabels,UIImages等。 点击 Editor -> Pin > (Select...) to Superview 再次单击编辑器 -> 解决自动布局问题 -> 添加缺少的约束或重置为建议的约束。这取决于你的情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 2015-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多