[英]"Unable to simultaneously satisfy constraints" with UITableViewCell
我使用 Interface Builder 在UITableViewCell
為我的 Xcode 13.0/Swift 5/iOS 13.5 應用程序創建了一個非常簡單的布局:
UIStackView
(里面有 2 個UIView
和UILabel
)在頂部,一個UIView
(里面有一個UIImageView
)在它下面。
目前的確切限制是:
UIStackView
: 10pts 領先,10pts 尾隨,0pts 頂部,10pts 到底部的UIView
,50pts 的高度UIView
: 20pts 前導,20pts 尾隨,10pts 底部,(從 UIStackView 頂部UIStackView
),高度=寬度UIView
內的UIImageView
: 0pts 前導/尾隨/頂部/底部,將中心 x 對齊到 Superview (= UIView
) 與關於 stackoverflow 上警告的其他問題相反,我不直接設置UITableViewCell
的高度,而是希望它由其內容設置。 UIImageView
的圖像在運行時設置並應保持其形狀,因此方形圖像應為方形,其他矩形圖像應水平居中(-> 左/右不可見條,如有必要)但不是垂直居中。
Xcode 不會抱怨缺少約束,但這種布局一直給我臭名昭著的“無法同時滿足約束”警告。
[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:0x600002d22d50 UIStackView:0x7fe4fa293330.height == 50 (active)>",
"<NSLayoutConstraint:0x600002d22df0 UIView:0x7fe4fa29d1c0.height == UIView:0x7fe4fa29d1c0.width (active)>",
"<NSLayoutConstraint:0x600002d23070 V:|-(0)-[UIStackView:0x7fe4fa293330] (active, names: '|':UITableViewCellContentView:0x7fe4fa2840f0 )>",
"<NSLayoutConstraint:0x600002d23110 H:[UIView:0x7fe4fa29d1c0]-(20)-| (active, names: '|':UITableViewCellContentView:0x7fe4fa2840f0 )>",
"<NSLayoutConstraint:0x600002d23160 V:[UIStackView:0x7fe4fa293330]-(10)-[UIView:0x7fe4fa29d1c0] (active)>",
"<NSLayoutConstraint:0x600002d231b0 H:|-(20)-[UIView:0x7fe4fa29d1c0] (active, names: '|':UITableViewCellContentView:0x7fe4fa2840f0 )>",
"<NSLayoutConstraint:0x600002d23200 V:[UIView:0x7fe4fa29d1c0]-(10)-| (active, names: '|':UITableViewCellContentView:0x7fe4fa2840f0 )>",
"<NSLayoutConstraint:0x600002d36530 'UIView-Encapsulated-Layout-Height' UITableViewCellContentView:0x7fe4fa2840f0.height == 325.5 (active)>",
"<NSLayoutConstraint:0x600002d364e0 'UIView-Encapsulated-Layout-Width' UITableViewCellContentView:0x7fe4fa2840f0.width == 295 (active)>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x600002d22df0 UIView:0x7fe4fa29d1c0.height == UIView:0x7fe4fa29d1c0.width (active)>
我已經檢查過wtfautolayout.com但我能看到的唯一錯誤是高度:如果寬度是 295,那么高度應該正好是 50+10+295-40+10=325(UIStackView.height + 約束在-between + UIView.width - 前導/尾隨約束 + 底部約束),而不是 325.5。 其他一切對我來說都很好,所以我不確定為什么它會計算出錯誤的高度(如果這就是問題的話)。
我已經嘗試了幾件事:
UIStackView
的固定高度(在一切看起來都很好之前沒有使用它並且它沒有抱怨它,但仍然收到警告)UIView.width = UIImageView.height
(1:1 縱橫比,而不是上面的那個)UIImageView.width = UIImageView.height
(1:1 縱橫比,而不是上面的那個)沒有任何效果,我不斷收到約束警告,如果由於我更改了某些內容而沒有在縱向模式下顯示,那么一旦我切換到橫向模式,它就會出現。 如何在 IB/無代碼中解決此問題?
嘗試將 height=width 約束的優先級更改為High而不是Required
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.