2012-07-15 90 views
1

我有一個自定義表格單元格,它有一個自定義的UI視圖。我的單元格高度是動態的,因爲它取決於來自服務器的數據。一旦我有數據,我調整單元格框架的大小,使其在表格中可見。自定義UiTableCell調整大小問題

但是當我通過修改單元格的高度來調整單元格的大小時,單元格的內容永遠不會正確調整大小。我已經正確設置了內部視圖的大小調整大小,但不確定當我通過修改單元格框架更改表視圖的heightForRowIndexPath委託方法中的單元格高度時,內部視圖不會調整大小。

解決方法我在這裏找到的解決方法是,一旦我爲單元格設置了新框架,我爲內部容器視圖設置了相同的框架,該框架調整了所有子視圖的大小。

我只需要知道什麼可能是單元格調整大小的問題。

由於提前

感謝, 納文

+0

你能提供一個圖像嗎?我不知道你在說什麼。 – CodaFi 2012-07-15 13:35:00

+0

這只是一些顏色和一些標籤的視圖。沒有花哨的細胞。 – nkd 2012-07-15 13:40:40

+0

你可以顯示heightForCellAtIndexPath的代碼嗎? – 2012-07-15 14:06:33

回答

3

有對所有的意見,autoresizesSubviews,這將使自動調整大小的屬性。也就是說,它對UITableView單元格意味着它的子視圖會被調整大小。但是,UITableViewCell的「contentView」屬性不是子視圖,它是由單元管理的視圖。雖然對單元格的幀更改會傳播到contentView似乎是合乎邏輯的,但它們不是。我只是修改了我自己的tableView項目,以驗證在單元格和contentView上都設置了autoresizesSubviews,並且單元格框架更改對contentView沒有影響。

根據我的經驗,框架高度不影響單元格的顯示方式,因爲backgroundView(如果有)和contentView都是「託管」而不是子視圖。你甚至不能使用它作爲heightForRowAtIndexPath:因爲在單元被創建之前調用回調會被調用(並且試圖在該方法中獲取和使用它會導致應用程序崩潰)。

+0

:似乎你的答案是正確的,謝謝。當單元格高度發生變化時,我更改了內容視圖框架,並且它沒有任何問題地調整了所有子視圖的大小。但有一點我不明白的是,爲什麼當單元格框架發生變化時不會傳播到單元格的內容視圖?你在那裏的事情可能是蘋果代碼中的錯誤? – nkd 2012-07-15 18:31:38

+0

我在原始帖子中回答了您的問題。由於「contentView」不是子視圖,UITableViewCell沒有義務調整它的大小。在某些情況下,您可能不希望調整大小。所以要非常清楚,不,我不認爲這是一個錯誤。 – 2012-07-15 20:29:40

+0

我明白了,謝謝大衛 – nkd 2012-07-17 09:53:08

3

如果子視圖被添加到單元contentView事情應該在layoutSubviews罰款。但是,在佈置子視圖之前,您必須記得致電[super layoutSubviews];,這將會正確調整單元的contentView的大小。

+2

我忘了致電超級謝謝! – Josh 2016-06-28 22:28:58

+1

我很高興這是一個超級電話我失蹤,而不是(又一個)iOS怪癖。謝謝! – 2017-04-20 20:29:03