首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带全页单元格的UICollectionView与带有子视图控制器的UIScrollView

带全页单元格的UICollectionView与带有子视图控制器的UIScrollView
EN

Stack Overflow用户
提问于 2018-07-26 06:31:01
回答 1查看 861关注 0票数 10

我正在尝试创建一个ViewController,它有可滑动的页面(android类似标签)页面。这些页面本身将包含滚动视图(垂直)和多个视图,这些视图将根据响应类型动态添加(每个页面的不同网络调用)。我不能使用PageViewController,因为我希望页面只占屏幕的一半。

关于CollectionView的问题-

  • 如果单元格被重用(或从内存中删除),我将如何维护单元格的UI状态并存储这些数据(对于视图来说尤其困难,因为每个页面中可能有不同类型的视图)

关于ScrollView的问题-

  • 如果所有页面视图控制器都在内存中,并且每个视图都在内存中,我担心是否会出现内存问题

每个页面中的数据将是4-10个堆栈视图,每个堆栈视图包含2-10个图像/标签,或者仅仅是一个集合视图。

PSS -标签总数不超过10个,最少为1个

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-27 08:56:28

我用collectionView实现了它,因为它应该更有效地使用资源。但是我们需要缓存视图控制器的状态。下面是一个例子

假设您有控制器A,它包含带有单元格的collectionView和子控制器。然后在单元格中逐行

代码语言:javascript
运行
复制
....
var childrenVC: [Int: UIViewController] = [:]
....
// cell for row
let cell: ChildControllerCell = collectionView.dequeueReusableCell(for: indexPath)
if let childController = childrenVC[indexPath.row] {
   cell.contentView.addSubview(childController.view)
   childController.view.frame = cell.contentView.frame
} else {
   let childViewController = ChildViewController()
   addChildViewController(childViewController)
   childViewController.didMove(toParentViewController: self)
   cell.contentView.addSubview(childController.view)
   childController.view.frame = cell.contentView.frame
   childrenVC[indexPath.row] = childViewController
   cell.childVC = childViewController
}
return cell
....
class ChildControllerCell: UICollectionViewCell {
     var childVC: UIViewController?
     override func prepareForReuse() {
        super.prepareForReuse()
        if !contentView.subviews.isEmpty {
            childVC?.willMove(toParentViewController: nil)
            childVC?.view.removeFromSuperview()
            childVC?.removeFromParentViewController()
        }
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51532336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档