我有一個UITableViewCell
子類中,我實例化一個UIViewController
子類,並添加它view
到UITableViewCell
的contentView
:topLayoutGuide的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
應占據單元格的整個大小。
這一切工作正常在第一時間顯示在單元格,但重用後viewController
的topLayoutGuide
似乎隨機陷入困境,導致UIImageView
不再被固定到電池的頂部,而不是下移:
在第一個顯示屏上,topLayoutGuide.length
爲0,這是正確的。然而,在向下滾動&之後,我可以在單元的prepareForReuse()
中看到viewController.topLayoutGuide.length
更改爲179.333333333333或163.666666666667,這導致整個單元格佈局混亂。
我不明白爲什麼topLayoutGuide
正在改變自己像這樣細胞重用。
我想一個解決辦法是簡單地受影響UIImageView
針頂端罐邊,而不是topLayoutGuide
,這會迴避這個問題 - 但似乎Xcode的6不再提供這個功能(至少,不是沒有創造在代碼中手動約束......)
此行爲在iOS 8中展示,我沒有測試過其他iOS版本。
將頂部空間固定到超級視圖是故事板中的常規約束。應該是右下方菜單中的一個選項,或者如果您按住Ctrl並從視圖向上拖動其超級視圖。 – shim 2014-12-10 22:44:58
它一直都是,但是在Xcode 6.1中,即使我專門選擇了超級視圖,它似乎仍堅持固定到「頂層佈局指南」。 我可以通過編輯器菜單找到強制將其固定到Xcode 6中的超級視圖的唯一方法。 – 2014-12-10 23:11:07
取決於視圖的位置。如果您在靠近頂部的根視圖中有子視圖,則它將默認爲topLayoutGuide。您應該能夠在檢查員中將其改回。將檢查出來,確保。 – shim 2014-12-11 14:17:14