2016-09-17 78 views
1

使用自動佈局將UIImageView添加到UITableViewCell如何用自動佈局定義最大寬度約束?

UIImageView的寬度應爲UITableViewCell寬度的50%,但無論如何不得大於50px。

這不起作用:

NSLayoutConstraint.activate([ 
     cellImageView.topAnchor.constraint(equalTo: contentView.topAnchor), 
     cellImageView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor), 
     cellImageView.centerXAnchor.constraint(equalTo: contentView.centerXAnchor), 
     cellImageView.heightAnchor.constraint(equalTo: cellImageView.widthAnchor, multiplier: cellImage.size.height/cellImage.size.width), 
     cellImageView.widthAnchor.constraint(equalTo: contentView.widthAnchor, multiplier: 0.5), 
     cellImageView.widthAnchor.constraint(lessThanOrEqualToConstant: 50) 
     ]) 

如何我一定要定義佈局的限制?

回答

2

這是一個佈局庫嗎?我不熟悉你的代碼的語法,但根據您的描述,這聽起來像你想的寬度限制是:

  • lessThanOrEqualToConstant: 50
  • equalTo: contentView.widthAnchor, multiplier: 0.5比50pt約束優先級較低
+0

如果圖像寬度應該是單元格寬度的50%或最大50px,爲什麼它會是'greaterThanOrEqualTo'?語法是Swift 3. – Manuel

+0

啊,你的編輯恰好相反。我會編輯我的答案。關鍵部分是第二個約束的較低優先級。 – Connor

+0

對不起,我的描述可能不夠清晰,我的意思是它最多不超過50%。更新了帖子:) – Manuel

0

您將設置兩個單獨的約束與不同的優先級。一個約束將是50%寬度和UILayoutPriority.DefaultHigh優先級(例如750),而第二個約束將是具有UILayoutPriority.Required優先級的50 point約束(例如1000)。然後,這將試圖滿足這兩個約束條件,但是如果他們遇到衝突(即超過50點)就會打破50%。

+0

我很困惑,你說了上面的不同之處(「通過將50%約束設置爲999」)。這個評論也有點混亂,因爲這會推斷50%比50pt更強。由於這是最強的約束,這將使觀點保持在50%。 – Firo

+0

對不起,這裏更正後的評論:「這沒有奏效,因爲當我設置UILayoutPriority.DefaultHigh爲50%約束時,即使沒有激活50pt約束,它也不會生效。解決方案是保留優先級50pt約束(默認爲1000),並將50%優先級設置爲999.「所以你的解決方案几乎可以:) – Manuel

+0

啊,這樣做更有意義。感謝您的澄清。是的,有時候,'高'是不夠的,因爲其他[有時更隱蔽]的主動約束(例如擁抱/拉伸)。很高興'999'工作! – Firo