我正在尝试将UIView *separatorView
添加到我的收藏视图和表格视图的顶部,这些视图会在相应视图contentOffset.y > 0
时显示。我通过在viewDidLayoutSubviews
中添加视图并将其添加到self.view
,在我的收藏视图上完成了这项工作。然后通过使用一些滚动视图委托方法,我可以使它显示和隐藏。这很好用但是对于表视图,如果我使用相同的概念,则separatorView会与表视图一起滚动。我仍然将separatorView添加到self.view
,但它的行为与集合视图上的行为不同。我没有希望separatorView滚动。我希望它保持在顶部。我是否正确地认为使表格视图工作的方法是子类UIViewController
并管理其中的表视图以及separatorView?有没有办法让它在我当前的UITableViewController
子类中工作?
基本上,为什么self.view
滚动表视图而不是集合视图?这似乎不一致。
感谢您的帮助。
编辑:添加图片以展示想法。
答案 0 :(得分:3)
self.view
中的 UITableViewController
是UITableView
,因为tableViewController会覆盖视图控制器上的loadView
。
如果您运行以下代码:
UITableViewController *tableViewController = [[UITableViewController alloc] init];
NSLog(@"%@",tableViewController.view);
您将获得以下控制台输出:
2014-05-13 21:19:02.823 Test[28681:60b] <UITableView: 0x109834200; frame = (0 20; 320 548); clipsToBounds = YES; autoresize = W+H; gestureRecognizers = <NSArray: 0x109548f00>; layer = <CALayer: 0x109548c40>; contentOffset: {0, 0}>
如您所见,self.view
不是UIView
,而是UITableView
。您的分隔符视图使用tableView滚动,因为调用:
[self.view addSubview:separatorView];
与调用完全相同:
[self.tableView addSubview:separatorView];
如果您希望分隔符保持在固定位置,则需要将其添加到tableView / collectionView的superview中,而不是滚动视图本身。
UICollectionViewController
中未发生这种情况的原因是因为self.view
实际上是UICollectionViewControllerWrapperView
个对象。这是一个私人类,但从名称来看,我假设它是一个包裹UIView
的{{1}}。
实现您想要的最明智的方法是使用custom container view (child view controller),它是包含分隔符视图和tableView / collectionView控制器的UICollectionView
子类。
如果您不想添加子视图控制器,那么另一种选择就是像您说的那样,创建一个UIViewController
子类并在视图控制器视图中添加分隔符视图和tableView作为子视图如果您不使用UIViewController
,则会失去奖励功能,例如自动调整tableView的contentInsets以获得键盘外观等。