2014-11-25 10 views
0

我認爲,如果當我使用auto layout&xib創建一個uitableviewcell時,爲什麼要將translatesAutoresizingMaskIntoConstraints設置爲YES?

translatesAutoresizingMaskIntoConstraints = YES

佈局系統將產生基於當前XIB文件大小(例如寬度和高度)一些隱式的限制,這是不適合於動態高度細胞(例如有在單元格中有多行標籤)。

但是在我的項目中,如果我在awakeFromXib中設置translatesAutoresizingMaskIntoConstraints = NO,會出現很多佈局問題,並且如果將translatesAutoresizingMaskIntoConstraints設置爲默認值(是)。一切正常。這兩個寬度將更改爲tableview的寬度,高度將根據多行標籤進行調整。我對翻譯自動排版MasksIntoConstraints的理解是否錯誤?

回答

0

從蘋果開發者文件,我有一個規則,也許它充分利用我們

對於視圖在大多數情況下,你想translatesAutoresizingMaskIntoConstraints是NO是知道自動佈局。原因在於,通過轉換自動調整大小的掩碼生成的約束已經足以在給定其超級視圖幀的情況下完全指定視圖的框架,這通常太多了。例如,這種翻譯會阻止按鈕在其標題改變時自動採用其最佳寬度。

主要情況中,你不應該叫setTranslatesAutoresizingMaskIntoConstraints:當你不是誰指定視圖的到其容器關係的人。例如,NSTableView放置NSTableRowView實例。它可以通過允許將自動調整掩碼轉換爲約束來實現,或者它可能不會。這是一個私人實現細節。您不應該調用的其他視圖setTranslatesAutoresizingMaskIntoConstraints:包括NSTableCellView對象,NSSplitView的子視圖,NSTabViewItem視圖或NSPopover,NSWindow或NSBox對象的內容視圖。對於那些熟悉經典Cocoa佈局的人:如果你不會在經典風格的視圖中調用setAutoresizingMask:你不應該在自動佈局下調用setTranslatesAutoresizingMaskIntoConstraints。

0

讓iOs do its internal stuff並嘗試限制只對您自己的視圖所做的更改,即contentView的子視圖。

+0

事實上,我幾天前遇到了一個問題,當我使用自定義視圖作爲tableHeaderView。我發現如果我沒有將translatesAutoresizingMaskIntoConstraints設置爲NO,那麼自定義視圖的高度將始終是xib文件的高度。只有當我將它設置爲NO時,自定義視圖的高度纔會被dynamiclly調整。所以我想知道爲什麼我必須在自定義視圖中設置translatesAutoresizingMaskIntoConstraints爲NO並將其設置爲YES在tableview單元格中? – ximmyxiao 2014-11-25 06:22:36

+0

答案在於鏈接的文章:「你不應該調用setTranslatesAutoresizingMaskIntoConstraints的主要情況是當你不是指定一個視圖與它的容器的關係的人,例如,一個NSTableRowView實例被NSTableView放置。通過允許將自動調整大小的掩碼轉換爲約束來做到這一點,或者它可能不會,這是一個私有的實現細節。「無論什麼「解決方案」在當前版本中爲您工作,可能會在任何時候停止工作,您將不會有任何責任。 – 2014-11-25 07:18:33

+0

,但在一些像<<編程IOS 7 >>這樣的書中這樣說,而且在我以前的問題中,直到你手動將此標誌設置爲NO時才能修復它---從書中引用:「這是一個明智的規則,但它意味着如果您打算將自己的任何顯式約束應用於此視圖,則可能需要記住通過將視圖的translatesAutoresizingMaskIntoConstraints屬性設置爲NO來關閉此自動行爲。如果您不這樣做,你將最終得到影響這個視圖的隱式約束和顯式約束,並且你不可能想要那個「 – ximmyxiao 2014-11-25 09:23:14

0

如果您在XIB/Storyboard中正確設置了自動佈局約束,那麼系統本身將爲您處理佈局大小。這就是你設置布爾值的原因。如果您沒有設置約束條件並且沒有設置布爾值,那麼您需要負責視圖大小和位置,您必須在代碼中處理這些大小和位置。隨着新的外形因素引入最佳使用適當的佈局,並讓自動佈局系統爲您處理框架。

+0

事實上,我前幾天遇到了一個問題,當我使用自定義視圖作爲tableHeaderView。我發現如果我沒有將translatesAutoresizingMaskIntoConstraints設置爲NO,那麼自定義視圖的高度將始終是xib文件的高度。只有當我將它設置爲NO時,自定義視圖的高度纔會被dynamiclly調整。所以我想知道爲什麼我必須在自定義視圖中設置translatesAutoresizingMaskIntoConstraints爲NO並將其設置爲YES在tableview單元格中? – ximmyxiao 2014-11-25 05:50:02

相關問題