我的应用程序使用Google Admob / Firebase
我想滚动到收藏夹视图中的正确项目。在我使用Google Admob实施广告之前,一切工作正常。现在,当我在集合视图中选择一个项目时,如果它在4之后的任何项目(这是我开始展示广告之前显示的内容数量),则不会滚动到该项目,而是滚动到一个广告,而不是选中的项目项目。
如果我在前4个(在广告开始展示之前)选择了一个项目,它会将我滚动到正确的项目。
这里是我的完整代码
个人资料视图控制器(选择了一个项目后,推动用户查看详细显示该项目的视图,并在设置视图时将其滚动到所选项目)
我尝试添加一行,减去显示的广告数量即可将我带到正确的项目,但仍然没有运气
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let singlePostVC = (storyboard!.instantiateViewController(withIdentifier: "SinglePostVC") as? SinglePostVC)!
// number of Ad cell that has shown up until current row
let numberOfAdsShownSoFar = indexPath.item / (singlePostVC.numOfContentBeforeAds + 1)
// minus the number of Ads shown
let selectedIndex = indexPath.item - numberOfAdsShownSoFar
singlePostVC.selectedIndex = selectedIndex
singlePostVC.userProfileController = self
singlePostVC.posts = posts
singlePostVC.navigationItem.title = "\(user?.username ?? "")"
navigationController?.pushViewController(singlePostVC, animated: true)
}
SinglePostVC
此视图在用户在上一个视图控制器中选择一个项目后显示。设置视图后,用户将转到所选项目。
var selectedIndex = Int()
// Google ADMob
// show four content feed before Ad show on the fifth row
let numOfContentBeforeAds = 4
// the total possible number of ads to show
var totalNumberOfAdsToShow = 0
var hasScrolledToItem = false
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
let indexPath = IndexPath(item: selectedIndex, section: 0)
// only scroll to the item if it haven't been scrolled before
if(!hasScrolledToItem){
hasScrolledToItem = true
postsCollectionView.scrollToItem(at: indexPath, at:.top , animated: false)
}
}
编辑-经过更多考虑之后。我相信我只需要避免显示广告(这是一个集合视图单元xib),直到选中的项目也从那里滚动出来,然后开始广告计数。仍然是一个问题,如何实现呢?