我已实施自定义UITabBarController
第一和第二UITabBarItem
是UICollectionViewController
第四个UITabBarItem
是UIViewController
第一个选项卡中的CollectionView及其单元格以编程方式创建,并与动态单元格大小完美配合。
第二个选项卡中的CollectionView方法不会被编辑。
问题:应用程序已启动,第一个CollectionView加载了一个单元格,然后我转到第二个选项卡,它也是一个没有任何单元格的CollectionViewController,然后我再次转到第一个选项卡第一个UICollectionview上的单元格无法显示。
我注意到的事情:
collectionview
方法上添加了调试点。第一个选项卡VC在从第二个选项卡移动到第一个选项卡后调用第二个VC(奇怪!)的方法。 UIViewController
),然后返回第一个标签不会造成任何问题。我尝试过的解决方案:
viewWillAppear
中注册第一个VC的单元格(它曾经在dequeueReusableCell
崩溃,但现在在分配标记并在cellForItemAt中检查后不会崩溃)collectionview
分配标记,并在两个VC的方法中检查collectioniView.tag
,但第一个选项卡VC仍然在第二个选项卡中调用方法VC 编辑1:
在viewWillAppear()
SetupCollectionView(){
collectionView?.register(VideoCell.self, forCellWithReuseIdentifier: cellId)
self.collectionView?.delegate = self
self.collectionView?.dataSource = self
}
第一个VC中的CollectionView方法
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
if collectionView.tag == 339 {
print("videos.count: \(self.videos.count)")
if videos.count > 0 {
return self.videos.count
}else {
return 0
}
}
return 0
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
if collectionView.tag == 339 {
//setup cell to display
}else{
let cell2 = collectionView.dequeueReusableCell(withReuseIdentifier: "cellId", for: indexPath)
return cell2
}
}
在sizeForItemAt
和第二个VC中执行相同的检查。
编辑2:
self.window?.rootViewController = CustomTabBarController()
第一次VC
let layout = UICollectionViewFlowLayout()
let homeController = HomeControllerMain(collectionViewLayout: layout)
let homeViewNavController = UINavigationController(rootViewController: homeController)
homeViewNavController.tabBarItem.title = nil
homeViewNavController.tabBarItem.image = UIImage(named: "home1")
homeViewNavController.tabBarItem.selectedImage = UIImage(named: "home")
homeViewNavController.tabBarItem.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0)
第二个VC
let commentController = searchMainViewController(collectionViewLayout: layout)
let commentViewNavController = UINavigationController(rootViewController: commentController)
commentViewNavController.tabBarItem.title = ""
commentViewNavController.tabBarItem.image = UIImage(named: "search1")
commentViewNavController.tabBarItem.selectedImage = UIImage(named: "search")?.withRenderingMode(.alwaysOriginal)
commentViewNavController.tabBarItem.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0)
答案 0 :(得分:0)
解决!
我在 homeController 和 commentController 中使用了单个UICollectionViewFlowLayout
变量。
为 commentController 创建了第二个UICollectionViewFlowLayout
变量并解决了问题。