Ok I've checked my code, what I do was: I got a tableView on the left side of the screen, and on the rest a UIScrollView, inside it I had on the top a view which width is equal to the collectionView.contentSize.width, and below that view, the collectionView, with its height equal to the screen height, and its width equal to its contentSize.width. After that, the ScrollView only scrolls horizontally, and the collectionView only scrolls vertically, so, when you scroll horizontally, the tableView stays, and the header view and the collection scrolls horizontally, and if you scroll vertically the header view stays fix, and the collection view and the tableView scrolls at the same time (you have to link their delegates).

That's what I do in the UIScrollViewDelegate
pragma mark - UIScrollViewDelegate
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView == _scrollView) {
if (scrollView.contentOffset.y > 0 || scrollView.contentOffset.y < 0 ) {
scrollView.contentOffset = CGPointMake(scrollView.contentOffset.x, 0);
}
} else {
_tableView.contentOffset = CGPointMake(0, scrollView.contentOffset.y);
_collectionView.contentOffset = CGPointMake(0, scrollView.contentOffset.y);
}
}
The height of the cells of the tableView and the height of the cells of the collectionView was the same.