在iOS上實現瀑布流介面

2021-08-26 22:00:51 字數 1546 閱讀 8692

前陣子需要做乙個需求,在iphone上實現瀑布流效果。

第一眼看到這個需求,我想到的兩種解決方案分別是:

1. 使用多個uitableview,然後控制它們同時滾動;

2. 使用乙個uiscrollview,然後參考uitableview的實現自己做乙個符合需求並且以後可以重用的控制項。

我首先嘗試了第乙個方案,並且google過控制多個uitableview同時滾動的**,在stackoverflow裡面找到一段蠻詳細的**了,不過在複雜的使用者操作下,仍然會出現滾動不同步的情況。

最終,我放棄了這個方案。

而第二個方案的關鍵點就在於參考uitableview實現時,如何重用單元格。

下面是我實現的重用**:

- (void)onscroll

}} else

// look back to load visible cells

for (int j = basicvisiblerow - 1; j >= 0; --j)

cell = [self.waterflowdatasource waterflowview:self cellforrowatindexpath:indexpath]; // nil ?

cell.indexpath = indexpath;

cell.frame = cellrect;

if (!cell.superview) [self addsubview:cell];

nslog(@"cell info : %@\n", cell);

[singlevisiblearray insertobject:cell atindex:0];

} else

}// look forward to load visible cells

for (int j = basicvisiblerow + 1; j < [singlerectarray count]; ++j)

cell = [self.waterflowdatasource waterflowview:self cellforrowatindexpath:indexpath]; // nil ?

cell.indexpath = indexpath;

cell.frame = cellrect;

if (!cell.superview) [self addsubview:cell];

nslog(@"cell info : %@\n", cell);

[singlevisiblearray insertobject:cell atindex:0];

} else

}// recycle invisible cells

for (int j = 0; j < [singlevisiblearray count]; ++j) }}

}

主要思想就是,1. 找到乙個需要展示的cell;2. 以這個cell開始,向前、向後推進,為需要展現出來的cell分配;3. 遍歷可見cell,**不可見的物件。

最後,把**稍微做了抽離,弄了個小demo,放到github:

在iOS上實現瀑布流介面

前陣子需要做乙個需求,在iphone上實現瀑布流效果。第一眼看到這個需求,我想到的兩種解決方案分別是 1.使用多個uitableview,然後控制它們同時滾動 2.使用乙個uiscrollview,然後參考uitableview的實現自己做乙個符合需求並且以後可以重用的控制項。我首先嘗試了第乙個方案...

iOS 實現 瀑布流介面

前陣子需要做乙個需求,在iphone上實現瀑布流效果。第一眼看到這個需求,我想到的兩種解決方案分別是 1.使用多個uitableview,然後控制它們同時滾動 2.使用乙個uiscrollview,然後參考uitableview的實現自己做乙個符合需求並且以後可以重用的控制項。我首先嘗試了第乙個方案...

iOS 瀑布流的實現方法

瀑布流 又稱瀑布式流式布局,是比較流行的一種頁面布局,視覺表現為參差不齊的多欄布局,可以參考 或者蘑菇街的客戶端。隨著頁面的滾動,這種布局會不斷的載入資料並附加到當前尾部。實現思路 ios上可以使用uiscrollview來實現,假設要展示三列,則每一列可以放乙個uiview,做為容器。載入到資料後...