我認爲,如果當我使用auto layout&xib創建一個uitableviewcell時,爲什麼要將translatesAutoresizingMaskIntoConstraints設置爲YES?
translatesAutoresizingMaskIntoConstraints = YES
佈局系統將產生基於當前XIB文件大小(例如寬度和高度)一些隱式的限制,這是不適合於動態高度細胞(例如有在單元格中有多行標籤)。
但是在我的項目中,如果我在awakeFromXib
中設置translatesAutoresizingMaskIntoConstraints = NO
,會出現很多佈局問題,並且如果將translatesAutoresizingMaskIntoConstraints設置爲默認值(是)。一切正常。這兩個寬度將更改爲tableview的寬度,高度將根據多行標籤進行調整。我對翻譯自動排版MasksIntoConstraints的理解是否錯誤?
事實上,我幾天前遇到了一個問題,當我使用自定義視圖作爲tableHeaderView。我發現如果我沒有將translatesAutoresizingMaskIntoConstraints設置爲NO,那麼自定義視圖的高度將始終是xib文件的高度。只有當我將它設置爲NO時,自定義視圖的高度纔會被dynamiclly調整。所以我想知道爲什麼我必須在自定義視圖中設置translatesAutoresizingMaskIntoConstraints爲NO並將其設置爲YES在tableview單元格中? – ximmyxiao 2014-11-25 06:22:36
答案在於鏈接的文章:「你不應該調用setTranslatesAutoresizingMaskIntoConstraints的主要情況是當你不是指定一個視圖與它的容器的關係的人,例如,一個NSTableRowView實例被NSTableView放置。通過允許將自動調整大小的掩碼轉換爲約束來做到這一點,或者它可能不會,這是一個私有的實現細節。「無論什麼「解決方案」在當前版本中爲您工作,可能會在任何時候停止工作,您將不會有任何責任。 – 2014-11-25 07:18:33
,但在一些像<<編程IOS 7 >>這樣的書中這樣說,而且在我以前的問題中,直到你手動將此標誌設置爲NO時才能修復它---從書中引用:「這是一個明智的規則,但它意味着如果您打算將自己的任何顯式約束應用於此視圖,則可能需要記住通過將視圖的translatesAutoresizingMaskIntoConstraints屬性設置爲NO來關閉此自動行爲。如果您不這樣做,你將最終得到影響這個視圖的隱式約束和顯式約束,並且你不可能想要那個「 – ximmyxiao 2014-11-25 09:23:14