2014-12-05 40 views
0

我有一個UITableViewCell子類中,我實例化一個UIViewController子類,並添加它viewUITableViewCellcontentViewtopLayoutGuide的UITableViewCell後打亂了重用

viewController.view.frame = CGRectMake(0, 0, contentView.frame.size.width, contentView.frame.size.height) 
contentView.addSubview(viewController.view) 

viewController(這是作爲一個Storyboard創建) ,我有被固定在視圖頂部一個UIImageView(當然,這是topLayoutGuide,因爲Xcode的6 Interface Builder中似乎只讓我腳到topLayoutGuide,而不是容器頂部邊緣了...)

我還應該提到,單元格高度爲230,與Storyboard中的viewController.view大小相同,因此viewController應占據單元格的整個大小。

這一切工作正常在第一時間顯示在單元格,但重用後viewControllertopLayoutGuide似乎隨機陷入困境,導致UIImageView不再被固定到電池的頂部,而不是下移:

在第一個顯示屏上,topLayoutGuide.length爲0,這是正確的。然而,在向下滾動&之後,我可以在單元的prepareForReuse()中看到viewController.topLayoutGuide.length更改爲179.333333333333或163.666666666667,這導致整個單元格佈局混亂。

我不明白爲什麼topLayoutGuide正在改變自己像這樣細胞重用。

我想一個解決辦法是簡單地受影響UIImageView針頂端罐邊,而不是topLayoutGuide,這會迴避這個問題 - 但似乎Xcode的6不再提供這個功能(至少,不是沒有創造在代碼中手動約束......)

此行爲在iOS 8中展示,我沒有測試過其他iOS版本。

回答

0

我從來沒有設法找出問題所在,以及爲什麼topLayoutGuide在單元重用後出現奇怪現象,但我設法找出瞭如何固定到超級視圖(容器)邊界而不是Xcode中的佈局指南6,這解決了這個問題。

在界面生成器中,我使用了Editor > Pin > Top Space to Superview,這解決了它對我來說。

鑑於此選項似乎並不存在於菜單選項以外的任何地方,它看起來完全不直觀,但這就是您的Interface Builder ...!

+0

將頂部空間固定到超級視圖是故事板中的常規約束。應該是右下方菜單中的一個選項,或者如果您按住Ctrl並從視圖向上拖動其超級視圖。 – shim 2014-12-10 22:44:58

+0

它一直都是,但是在Xcode 6.1中,即使我專門選擇了超級視圖,它似乎仍堅持固定到「頂層佈局指南」。 我可以通過編輯器菜單找到強制將其固定到Xcode 6中的超級視圖的唯一方法。 – 2014-12-10 23:11:07

+0

取決於視圖的位置。如果您在靠近頂部的根視圖中有子視圖,則它將默認爲topLayoutGuide。您應該能夠在檢查員中將其改回。將檢查出來,確保。 – shim 2014-12-11 14:17:14