2016-04-17 54 views
3

我在視圖中有一個按鈕。我在界面構建器中爲我的按鈕設置了圖像。 ,我已經添加到我的按鈕界面生成器的約束條件是:當我NSLog myBtn.constraints記錄額外約束

右空間的SuperView = 10

頂部空間的SuperView = 10

底部空間的SuperView> = 10

留下空間到一個標籤> = 10

所有的東西都能正常工作,我對我的佈局沒有任何問題。 但是當我登錄按鈕限制使用此代碼:

NSLog(@"constraints for btnBack is: %@", self.btnBack.constraints); 

控制檯日誌:

constraints for btnBack is:(

"<NSContentSizeLayoutConstraint:0x7c35c400 H:[UIButton:0x7c3588a0(102)] Hug:250 CompressionResistance:750>" 

"<NSContentSizeLayoutConstraint:0x7c35c450 V:[UIButton:0x7c3588a0(92)] Hug:250 CompressionResistance:750>") 

我知道,頂部和左,右側和底部的限制不應該在這裏登錄,因爲它們是superview約束不是按鈕約束。 但是在這裏我沒有添加任何寬度和高度限制到我的按鈕(即使在代碼中)。

爲什麼會在控制檯中記錄高度和寬度的約束?

回答

6

如果視圖具有基於其內容的自然寬度,則返回該寬度爲intrinsicContentSize.width。否則,它將intrinsicContentSize.width設置爲UIViewNoIntrinsicMetric

同樣,如果它有一個自然高度,它會返回該寬度作爲intrinsicContentSize.height。否則,它將intrinsicContentSize.height設置爲UIViewNoIntrinsicMetric

按鈕的自然尺寸(寬度和高度)由其標題,字體,圖像以及其他細節決定。所以它的intrinsicContentSize.widthintrinsicContentSize.height都是有效的大小,而不是UIViewNoIntrinsicMetric

intrinsicContentSize.width != UIViewNoIntrinsicMetric時,自動佈局在視圖上安裝NSContentSizeLayoutConstraint類型的特殊約束。同樣,當intrinsicContentSize.height != UIViewNoIntrinsicMetric時,自動佈局在視圖上安裝NSContentSizeLayoutConstraint

有關這些特殊限制條件的詳細信息,請參閱this answer

+0

所以你的意思是他們就像真正的約束?我強迫我的寬度增長,然後我看到我的按鈕縮小。 (因爲我沒有爲我的按鈕添加約束寬度)。如果我將約束寬度添加到我的按鈕(在界面構建器中),我的按鈕不縮小。 –

+0

是的,它們是真正的約束條件,但默認情況下它們的優先級低於Required(1000)。當你添加你的寬度約束時,默認情況下它的優先級爲Required(1000),所以它「勝利」。 –

+0

謝謝。正確答案。 –