2017-10-18 60 views
1

我有一個簡單的UICollectionView,其中包含navigationController中的自定義單元格。出於某種原因,當我推送一個viewController時,collectionView單元在轉換過程中改變其佈局。swift:uicollectionview在轉換過程中更改單元格的內容偏移量

在viewController轉換過程中它是uicollectionview的一些常見行爲嗎?因爲,例如:標籤不具有這樣的問題

When back button was clicked 從的CollectionView

綠色添加新的視圖控制器

navigationController?.pushViewController(controller, animated: true) 

使用EasyPeasy

collectionView.easy.layout([ 
    Top(), 
    Right(), 
    Width(view.frame.width), 
    Bottom(10).to(button), 
]) 

button.easy.layout([ 
    Center(), 
    Height(60), 
    Width(300), 
]) 
+0

您有任何代碼可以告訴我們嗎? –

+0

很難理解你想用這些約束來做什麼,但是你沒有爲collectionview使用任何高度。我認爲這是按鈕計算的。因爲它看起來綠色collectionview被設置爲10px(也許?)..你什麼時候在你的代碼中設置約束?那個藍色盒子和那個元素的限制是什麼?感覺像你的自動佈局有一些問題無論如何.. –

+0

@MartinBorstrand UICollectionViewCell的backgroundColor是藍色的。我在viewDidLoad中設置了約束。對不起給您帶來不便。看起來像在轉換回單元格變得更小 – Dauren

回答

0

我自動佈局設置認爲我發現了你的問題,它在你的AppDelegate中。對您的導航控制器設置爲false的屬性isTranslucent似乎成了這個罕見的問題。半透明的導航欄將位於視圖控制器的視圖之上,如上圖所示。一個非半透明的導航欄會壓下你的視圖控制器的視圖,換句話說就是將它重新整理,以便它適合它。但是,爲什麼collectionview的動畫就像它一樣,實際上我不能給出明確的答案。也許別人可以做到這一點?..

爲了讓你的導航欄半透明,你可以在viewcontroller中設置'extendedLayoutIncluedsOpaqueBars'爲true的另一個屬性。

所以..這樣做。在你的AppDelegate:

window = UIWindow(frame: UIScreen.main.bounds) 
window!.makeKeyAndVisible() 
let controller = TestingNavigationController() 
let navigation = UINavigationController(rootViewController: controller) 
window!.rootViewController = navigation 

let navigationBarAppereance = UINavigationBar.appearance() 
navigationBarAppereance.isTranslucent = false 

然後,在您的視圖控制器viewDidLoad方法中加入這一行

extendedLayoutIncludesOpaqueBars = true 

希望這將解決您的問題! :)

Apple Documentation about extendedLayoutIncludesOpaqueBars

+0

@Dauren你會對我的回答作出反應嗎? –

相關問題