簡體   English   中英

UICollectionView布局故障

[英]UICollectionView layout malfunction

我正在構建字典應用程序,其功能之一是您可以“向下鑽取”定義。 您查找一個單詞,定義中有一個您不了解的單詞,因此您輕按該單詞,應用程序會顯示該單詞的定義(如果有)。 如果有人熟悉,這對於App Store上的iOS詞典應用程序來說是非常標准的。

一個功能是,我將擁有一個在向下鑽取時顯示每個單詞的條,這樣您就可以在此水平條上獲得一系列“單詞”。 這個想法是,您可以點擊鏈中的單詞來在單詞鏈中前后導航。

為了表示這條鏈,我使用一個UICollectionView和一個子類UICollectionViewController。 因為它本質上是一個帶有一行的“網格”,所以這對我來說很有意義。 我正在使用情節提要,因此我只是將自定義控制器嵌入到主視圖中,在主控制器和此自定義集合控制器之間來回傳遞事件。 很簡單

現在,假設用戶輕敲了許多不同的單詞,那么您將獲得UICollectionViewCells的“鏈”,該鏈從左到右在整個條形上逐漸增長,直到達到邊緣為止。 由於UICollectionView基於/具有UIScrollView,所以這應該不是問題。 我的想法是,如果要顯示的項目數超過視圖的寬度,則CollectionView將展開contentView並將項目放置在視圖端口的右邊緣之外,然后我可以以編程方式滾動視圖以顯示新的添加的項目。

這是我用來執行此操作的代碼(已編輯)。 我在子類UICollectionViewController中調用了此方法:

- (void)reloadDataWithAnimation
{
    [self.collectionView performBatchUpdates:^{
        [self.collectionView reloadSections:[NSIndexSet indexSetWithIndex:0]];
    } completion:^(BOOL finished) {
            [self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:model.data.count - 1 inSection:0]
                                        atScrollPosition:UICollectionViewScrollPositionNone animated:YES];
        }

    }];
}

這或多或少是我通常使用UITableView所做的事情:告訴我在更改模型后重新加載其數據。 直到開始我在SO上發現一個問題,涉及到performBatchUpdates的使用,然后才開始工作,直到我意識到需要進入完成塊為止,我在做scrollToItemAtIndexPath遇到了麻煩。

現在,這是一個時髦的部分:在項目填滿整個視圖之前,一切工作正常。 項第一次超出邊界時,CollectionView將該項置於行中最后一項的下方 這看起來真的很奇怪,因為視圖只有一排高,所以您可以半看停在該行中最后一個下方的物品,大部分被遮蓋了。 沒有滾動發生。

此時,如果來回滾動CollectionView,則該項將重新配置並移動到正確的位置。 或者,如果您添加另一個項目,它們將正確對齊,並且視圖將按預期滾動。 連續添加就可以了。 但是,如果向后滾動到左側然后添加另一個項目,則該項目會短暫出現在視口中當前當前可見的項目下方,然后視圖滾動到最右側,並且在滾動時,放錯位置的項目會跳至正確位置。

盡管我開始發布此問題是因為我在Stack Overflow上找不到任何內容,但是在編寫問題的過程中,“相似問題”側邊欄已更新,並且我發現了相似的問題,最終得到了答案。

類似的問題: UICollectionView單元格布局超出了集合視圖的范圍

顯然,此問題為Apple所知。

這是上述問題中鏈接的解決方案: https : //stackoverflow.com/a/13389461/700471

Nick Snyder發布的代碼完全為我解決了這個問題。

編輯:此外,最后,我繞過FlowLayout繼承了UICollectionViewLayout的子類,並通過本教程制作了自己的布局。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM