2017-10-19 90 views
-1

創建視圖無法同時滿足約束條件時,圖幅爲零

init(){ 
    super.init(frame: .zero) 
} 

創建視圖我想設置我的子視圖

func setViews(){ 
    self.addSubview(labelView) 
    self.addConstraintsWithFormat("V:|-10-[v0]-10-|", views: labelView) 
    self.addConstraintsWithFormat("H:|-10-[v0]-10-|", views: labelView) 
} 

一切正常後,但我已經警告說,

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:0x7f87ea8e6520 V:|-(10)-[BIPartners.labelView:0x7f87eb56be20] (Names: '|':BIPartners.labelView:0x7f87eb56a320)>", 
     "<NSLayoutConstraint:0x7f87ea8e6af0 V:[BIPartners.labelView:0x7f87eb56be20]-(10)-| (Names: '|':BIPartners.labelView:0x7f87eb56a320)>", 
     "<NSLayoutConstraint:0x7f87e868bdc0 '_UITemporaryLayoutHeight' V:[BIPartners.labelView:0x7f87eb56a320(0)]>" 
    ) 

我知道這個問題是當我將幀設置爲零。我將幀設置爲零,並將垂直邊距設置爲10.我應該如何解決此問題?

+0

你和VFL結婚了嗎?在堆棧視圖或其他內容中執行此操作可能會更容易,並隱藏/取消隱藏所需的元素,這樣您就不會對約束進行記錄。 – Adrian

回答

0

你應該通過降低標籤的底部釘扎約束的優先級,東西不到1000解決這個問題:

self.addConstraintsWithFormat("V:|-10-[v0]-10(@750)-|", views: labelView)

這將消除歧義的約束,保護您的底部填充和的真正高度標籤。

基本上,當您要使用固有內容大小並且標籤固定在兩側時,就會出現這種歧義。

當然,還有其他方法可以獲得所需的間距(邊距),但這個答案與您正在嘗試做的最接近。

+0

是的,你解決了我的問題!正確的方法是賴特「V:| - (10 @ 750) - [v0] - (10 @ 750) - |和相同的東西水平對齊 –

0

使用WTF Auto Layout瞭解您的錯誤。

在設置約束之前檢查視圖的bounds。如果它等於CGRect.zero,則不應用約束。

+0

我認爲的界限總是爲零。創建視圖時,我不給框架大小。所有觀點都基於constraitns!謝謝你, –

相關問題