2015-04-18 73 views
8

XCode 6.3/Swift 1.2是否向UITableViewCell的contentView添加了額外的邊距?在更新之前,我有一個自定義的UIView,它在我的單元格中一直延伸到屏幕上。例如:XCode 6.3爲tableviewcell添加邊距

enter image description here

現在,一切都在細胞似乎有,我不知道他們來自哪裏額外的利潤。

enter image description here

注意的是,這些觀點的寬度沒有在代碼中的任何方式和正確的改變,並留下被約束如下:

enter image description here

另外請注意,我用的tableView.separatorStyle = .None。我添加這個事實是因爲由於某種原因,在我的tableView中有一個默認分隔符,它似乎不會增加這些額外的邊距。

有誰知道他們是否在XCode 6.3中做了一些奇怪的改變?這種行爲在更新後直接發生。

編輯:

enter image description here

查看如何「相對於保證金」被選中:在尺寸檢查的這個屏幕打一槍換一個領先的約束仔細 enter image description here

+0

我在更新之前在iOS 8上運行此應用程序,它看起來像第一個屏幕截圖。 – ad121

+0

我不知道我還能補充什麼。我只是在每邊測試約束-16,並且它在屏幕上正確擴展,但我不知道爲什麼我的邊際會被推遲(我不想在不知道原因的情況下使用bandaid修復) 。我打印了contentView,view,tableView和cell本身的寬度,它們在iphone 6上都是375,但藍色塊的寬度是359,並且在問題中給出了約束條件。 – ad121

+0

但是,爲什麼您首先要對邊際進行限制?將它們設置爲內容視圖的實際邊緣,然後更改邊距不會影響到您。我意識到這並沒有回答根本問題,但假設邊界將是8,並將約束設置爲-8來補償是非常可怕的開始。 – matt

回答

19

看?那是你的問題。如果邊距改變,您的左邊緣會改變。 取消選中該菜單項,然後將常數更改爲零。對於尾隨限制也是如此,你的問題將會結束。

現在讓我們來解決更深層的問題:改變了什麼?你是完全正確的,有些事情。我相信他們修復了一個錯誤,並且你陷入了修復。記錄顯示單元的preservesSuperviewLayoutMarginstrue,表格的餘量爲0,16,0,16。即使在iOS 8.2上也是如此,所以iOS 8.2 應該有的有效利潤率爲16,但它們爲8,猶如preservesSuperviewLayoutMarginsfalse。但是在iOS 8.3中,這個設置是正確的 - 結果是你已經觀察到了。

因此,來解決這個問題的另一個方式會一直留下您的約束,因爲他們,但設置每個單元的preservesSuperviewLayoutMarginsfalsecellForRowAtIndexPath:。這同樣適用於在兩個系統中使結果完全相同。好消息:它好像在iOS 9中恢復了這樣的改變。因此,如果沒有改變,你的單元格在iOS 9和iOS 8.2以及之前的版本中看起來一樣。

+0

編輯來解釋潛在的現象:你是絕對正確的,邊際確實改變了!非常感謝你指出了這一點。 – matt

+0

..這是一些令人印象深刻的調試!必須查看我所有的表格視圖單元的約束條件。這解決了所有這些問題。謝謝。 – nmdias

+0

你真的被蘋果的新邊際限制所困擾。當您最初使用控制拖動形成約束時,它將是基於邊距的_un​​less您持有Option key_以獲得無邊距變體。因此,基於邊際的約束是一種選擇退出技術;你可以選擇退出,但大多數人不知道這樣做,並最終會使用它們,甚至沒有意識到它。 – matt