iOS 實現 瀑布流介面

2021-06-26 21:40:42 字數 1681 閱讀 5016

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

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

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

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

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

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

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

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

[cpp]view plain

copy

- (void

)onscroll  

}  } else

// look back to load visible cells

for(

intj = 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(

intj = 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(

intj = 0; j < [singlevisiblearray count]; ++j)   

}  }  

}  

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

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

在ios上實現瀑布流介面

在iOS上實現瀑布流介面

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

在iOS上實現瀑布流介面

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

iOS 瀑布流的實現方法

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