我在ViewController中嵌入了3个UIViews Header / Tabar / Container和ScrollView。所以这是我的结构:
在ContainerView中我加载了一个UICollectionView(就像这样):
let controller = storyboard!.instantiateViewControllerWithIdentifier("myCollectionViewController") as! myCollectionViewController
controller.delegate = self
self.addChildViewController(controller)
controller.view.backgroundColor = UIColor.brownColor()
self.containerView.addSubview(controller.view)
controller.didMoveToParentViewController(self)
一切正常,UICollectionView的每个单元都被加载,......唯一的问题是,所有隐藏的单元格(甚至是隐藏的单元格的所有部分)都是不可选择的。我的意思是我的功能" didSelectRowAtIndexPath"不适用于第一个屏幕外的每个像素。这是我的问题的一个方案:
这就是我在滚动之前的内容(左边是方案,右边是我在屏幕上实际拥有的内容) - >这里一切正常:
这就是我在滚动后的内容(左边是方案,右边是我在屏幕上实际拥有的内容) - >只有在滚动之前显示的像素可以调用" didSelectRowAtIndexPath" :
问题在于self.view.frame并不令人耳目一新。你知道我应该如何改变这个框架以及什么时候?
答案 0 :(得分:3)
您必须定义滚动视图内容大小
为您的滚动视图创建一个插座
@IBOutlet weak var scrollview : UIScrollView!
使其高度等于标题,tabBar和容器的高度之和:
self.scrollView.contentSize = CGSizeMake(self.view.frame.width, header.frame.height + tabBar.frame.height + container.frame.height)
答案 1 :(得分:1)
问题定义:
除了滚动条视图外,我们所有遇到情况的都是UIViewController
,显示标题和标签栏。问题是这些附加视图减少了与滚动条相关的区域(在本例中为UICollectionView
)。在小屏幕设备中,我们的滚动条一次只显示少量项目。
建议的解决方案:
让这些附加视图与滚动条一起滚动 项目
如何申请?
实现这一目标的最方便的解决方案。出现在Scroller视图中。例如,UICollectionView
提供补充元素(页眉和页脚),它与集合视图项一起滚动。将标题和标签栏移动到UICollectionView
的标题区域。然后,在视图控制器中实现viewForSupplementaryElementOfKind
:
- (nonnull UICollectionReusableView *)collectionView:(nonnull UICollectionView *)collectionView viewForSupplementaryElementOfKind:(nonnull NSString *)kind atIndexPath:(nonnull NSIndexPath *)indexPath
{
UICollectionReusableView *reusableview = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"Header1" forIndexPath:indexPath];
return reusableview;
}
界面生成器:
UICollectionView
的标题区域已存在。但是,您需要通过界面构建器为其设置高度,以便在设计时出现。不要忘记为标题设置集合可重用视图标识符。
注意:这还需要您额外的工作才能在标题和TabBar上设置手势。
<强>更新强>
考虑删除标题和tabbar容器,并在运行时将其重新添加为适当位置的子视图。单击UICollectionView选项卡时,将其传递给viewForSupplementaryElementOfKind
方法中的标题可重用视图。单击标签选项卡时,将其添加到标签容器视图的顶部。当它是一个tableview时,它将它传递给headerForRow方法中的UITableView头。
答案 2 :(得分:0)
这似乎是你有mentioned in another question的另一个问题的延续。
查看故事板层次结构,我怀疑问题是,当您更改滚动视图内容大小和集合视图高度时,您不会更改tab bar view
的高度。收藏视图仍然可见,可能是因为容器tab bar view
没有剪辑内容(clipToBounds=false
)。但由于视图本身并未延伸到远远低于该视图及其子视图,因此无法识别触摸。
确保主视图,滚动视图的内容视图(内容大小),标签栏视图和集合视图都已正确调整大小。由于您已决定不使用标准视图层次结构(补充视图或标题视图),因此您必须自己处理管理视图边界的开销。