gpt4 book ai didi

swift - 我的约束破坏日志没有任何意义,有人可以帮助我理解吗?

转载 作者:行者123 更新时间:2023-11-28 12:33:01 27 4
gpt4 key购买 nike

所以在我的 tableViewCell 中,我有一个 imageView,它对尾部和前导 super View 有 0 点约束。 super View 的顶部约束为 8,底部约束为 30。然后我用这段代码根据图像添加 imageView 的方面约束:

override var image: UIImage? {
didSet {
if let image = image {
let aspect = image.size.width / image.size.height
aspectConstraint = NSLayoutConstraint(item: self,
attribute: NSLayoutAttribute.width,
relatedBy: NSLayoutRelation.equal,
toItem: self,
attribute: NSLayoutAttribute.height,
multiplier: aspect,
constant: 0.0)
}
}
}

internal var aspectConstraint : NSLayoutConstraint? {
didSet {
if oldValue != nil {
self.removeConstraint(oldValue!)
}
if aspectConstraint != nil {
self.addConstraint(aspectConstraint!)
}
}
}

我的代码如何打破任何限制?他们彼此无关

2017-01-10 21:15:18.502301 Gymkhana[4538:65958] [LayoutConstraints] 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. (

"<NSLayoutConstraint:0x78698d60 UILabel:0x7869e890'Identical twins play a mi...'.top == UITableViewCellContentView:0x7869e500.topMargin   (active)>",
"<NSLayoutConstraint:0x7869c930 V:[UILabel:0x79ba65a0'1h']-(8)-[Gymkhana.ThumbnailImageView:0x7869c340] (active)>",
"<NSLayoutConstraint:0x786a9ef0 H:[Gymkhana.ThumbnailImageView:0x7869c340]-(0)-| (active, names: '|':UITableViewCellContentView:0x7869e500 )>",
"<NSLayoutConstraint:0x78689700 H:|-(0)-[Gymkhana.ThumbnailImageView:0x7869c340] (active, names: '|':UITableViewCellContentView:0x7869e500 )>",
"<NSLayoutConstraint:0x7869a1b0 V:[Gymkhana.ThumbnailImageView:0x7869c340]-(30)-| (active, names: '|':UITableViewCellContentView:0x7869e500 )>",
"<NSLayoutConstraint:0x7869ca10 V:[UILabel:0x7869e890'Identical twins play a mi...']-(8)-[UILabel:0x79ba65a0'1h'] (active)>",
"<NSLayoutConstraint:0x798fb620 Gymkhana.ThumbnailImageView:0x7869c340.width == Gymkhana.ThumbnailImageView:0x7869c340.height (active)>",
"<NSLayoutConstraint:0x79b85b80 'UIView-Encapsulated-Layout-Height' UITableViewCellContentView:0x7869e500.height == 329 (active)>",
"<NSLayoutConstraint:0x79b82b80 'UIView-Encapsulated-Layout-Width' UITableViewCellContentView:0x7869e500.width == 320 (active)>" )

将尝试通过打破约束来恢复

<NSLayoutConstraint:0x798fb620
Gymkhana.ThumbnailImageView:0x7869c340.width==Gymkhana.ThumbnailImageView:0x7869c340.height (active)>

最佳答案

约束可以被视为 AutoLayout 在尝试计算 View 的 4 个参数时使用的规则:x、y(表示左上角的坐标)、宽度和高度。您在 ImageView 上设置了 5 个约束,因此除了特殊情况外,它们之间会有一些冲突。

您提到的前 4 个约束已经为 AutoLayout 提供了足够的信息来计算我提到的 imageView 的所有 4 个参数。然后纵横比约束出现,这几乎肯定会与其他约束冲突,除非您之前的纵横比已经导致与您在约束中设置的纵横比完全相同。

有两种方法可以解决这个问题:

  1. 如果您要设置到 imageView 的图像已经具有您想要的纵横比:完全移除纵横比约束。请改用 imageView 的 contentMode 属性。

  2. 如果您确实需要 imageView 的特定宽高比,那么您需要重新考虑其他 4 个约束,因为很明显,其中一些约束似乎并不能准确地表示您希望 imageView 的定位方式和调整大小。例如:也许您不需要前导和尾随约束,您只是希望 imageView 与其父 View 的左右两侧具有相同的距离?然后移除尾部和前导约束并改为添加“水平居中”约束。

关于swift - 我的约束破坏日志没有任何意义,有人可以帮助我理解吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41571157/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com