0
我創建一個彈出窗口,使用自動佈局。我的彈出窗口具有動態高度,並且必須以窗口爲中心,並帶有邊距。它有一個固定的寬度。iOS自動佈局視圖居中父母,邊距和動態高度
添加以下約束:
- 寬度=固定值
- 高度小於或等於計算值
- 上邊距=容器上邊距+固定值
- 底部邊緣=集裝箱底部邊距+固定值
- 中心x =集裝箱中心x
- 中心y =集裝箱中心y
看來工作,但Xcode中顯示一個警告:
無法同時滿足的約束。
以下列表中的至少一個約束可能是您不想要的約束之一。試試這個:(1)看看每個約束,並試圖找出你不期望的; (2)找到添加不需要的約束或約束並修復它的代碼。 (注意:如果你看到,你不明白NSAutoresizingMaskLayoutConstraints,請參閱文檔UIView的財產translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0x7e572a40 V:|-(>=19)-[UIView:0x7a8bb6a0] (Names: '|':UIView:0x7e572140)>", "<NSLayoutConstraint:0x7e573620 UIView:0x7a8bb6a0.bottom >= UIView:0x7e572140.bottom + 19>", "<NSLayoutConstraint:0x7e573950 UIView:0x7a8bb6a0.centerY == UIView:0x7e572140.centerY>"
)
將嘗試打破約束恢復
<NSLayoutConstraint:0x7e573620 UIView:0x7a8bb6a0.bottom >= UIView:0x7e572140.bottom + 19>
有什麼不對?如果我刪除了Xcode中斷的約束,它就不再起作用(我的彈出窗口不再可見)。
這是我的約束的代碼:
self.view.addConstraint(NSLayoutConstraint(item:_mainContainer,
attribute:NSLayoutAttribute.width,
relatedBy:NSLayoutRelation.equal,
toItem:nil,
attribute:NSLayoutAttribute.notAnAttribute,
multiplier: 1,
constant: UIPopup.defaultSize.width));
self.view.addConstraint(NSLayoutConstraint(item:_mainContainer,
attribute:NSLayoutAttribute.height,
relatedBy:NSLayoutRelation.lessThanOrEqual,
toItem:nil,
attribute:NSLayoutAttribute.notAnAttribute,
multiplier: 1,
constant:popupHeight));
self.view.addConstraint(NSLayoutConstraint(item:_mainContainer,
attribute:NSLayoutAttribute.top,
relatedBy:NSLayoutRelation.greaterThanOrEqual,
toItem:self.view,
attribute:NSLayoutAttribute.top,
multiplier: 1,
constant:verticalMargin));
self.view.addConstraint(NSLayoutConstraint(item:_mainContainer,
attribute:NSLayoutAttribute.bottom,
relatedBy:NSLayoutRelation.greaterThanOrEqual,
toItem:self.view,
attribute:NSLayoutAttribute.bottom,
multiplier: 1,
constant:verticalMargin));
self.view.addConstraint(NSLayoutConstraint(item:_mainContainer,
attribute:NSLayoutAttribute.centerX,
relatedBy:NSLayoutRelation.equal,
toItem:self.view,
attribute:NSLayoutAttribute.centerX,
multiplier: 1,
constant: 0));
self.view.addConstraint(NSLayoutConstraint(item:_mainContainer,
attribute:NSLayoutAttribute.centerY,
relatedBy:NSLayoutRelation.equal,
toItem:self.view,
attribute:NSLayoutAttribute.centerY,
multiplier: 1,
constant: 0));
只是使用中心y和高度約束用小於或等於,取下底部和頂部邊緣 –
我不能這樣做:我需要頂部和底部約束,以便彈出窗口在用戶旋轉設備時正確調整其大小(並且我想避免必須手動處理)。 –
,因爲您可以使用另一個高度約束並安裝/卸載它,或者更新現有高度約束的常量。 –