2014-04-08 63 views
12

我有自定義UITableViewCell並管理我的單元格的選擇。選中單元格並顯示覆選標記時,單元格寬度會縮小,帶有後續約束的我的標籤將移動到左側。如何有效避免內容移動?UITableViewCellAccessoryCheckmark和AutoLayout約束

我不想將約束設置爲領先,因爲我有靈活的tableview寬度,他們是正確對齊。當我想通過IBOutlets來更新代碼中的代碼限制時,我遇到了麻煩,因爲我在cellForRow:中返回UITableViewCell的多個子類,並且在嘗試設置代碼中的約束時出現didSelectRowAtIndexPath:中的無法識別的選擇器錯誤。任何優雅的解決方案謝謝。

enter image description here

enter image description here

回答

8

此行爲是由設計。

獲得所需行爲的最簡單方法是在每個單元格上設置一個空的附件視圖,將所有內容向左移動與複選標記相同的距離。

+2

不要忘了accessoryView優先於accessoryType。如果您有非零附件視圖,accessoryType將不會顯示。 – CrimsonChris

14

我有一個類似的(實際上,確切的)問題,其中複選標記會將所有內容都推向左側。

- 編輯:我原來的答覆後

了幾個小時,我意識到這是一個非常簡單的問題。

向左推這是一個約束,推動單元格的contentView。所以?

約束從右邊條目(如按鈕),到細胞自身,而不是它的內容查看連接。

Constraint to cell view



- 原來的答覆(實際的答案是在上面,這是備案):

我才意識到有一個很簡單的解決方案。當有勾號打開時,我有一個按鈕被向左推,我必須保留一個約束以保持它的位置(這樣'取消勾選'不會將按鈕向右移動)。這是從右邊的硬編碼'寬度',整體上只是不好的做法。別介意我無法'獲得'該複選標記'寬度'來動態地做到這一點。

解決方案?

從左側持有約束。

就是這樣。我也有一個標籤,所以在我的情況下:從左邊的按鈕約束到標籤(所以它們不會重疊)以及從左到左的按鈕內容視圖。基本上,右側的任何動作都不會真正「到達」左側(而是讓所有「坐在」右側)。

Cell with constraints to left

+1

這兩個很好的答案,比接受的解決方案簡單得多! –

+0

簡單,快速和智能的解決方案,是非常好的提示。 – FreeGor

+1

這不起作用Xcode 9,Swift 4,iOS 9.3。自動佈局抱怨,並打破約束。真的,它應該這樣做。基本問題是這是Apple設計上的缺陷:UITableViewCell很糟糕,就像UITableView一樣。它已經有十年了,並且已經準備好廢棄堆了。 – Womble