 <p>This is an interesting question. For sure I would say start with UIScrollView, and set the content size bigger than the screen size, exactly how big is up to you.</p> <p>Next you'll want to make some kind of implementation that efficiently figures out what cells are on screen. If I were you I would do something similar to how UITableView is done, i.e. make a custom object that keeps track of what indexes should be on screen based on the offset of the scroll view.</p> <p>Next you'll need this custom object to either directly or indirectly get the visible cells to display themselves on screen when they are visible, and remove them from the superview when they aren't. I'd also recommend reusing the views that are offscreen.</p> <p>This is a moderately challenging thing you are trying to make, so be sure you are very organized and don't be scared to make a few new custom object to perform specific tasks. </p> <p>Sample interface file:</p> <pre><code> @protocol doubleTableViewDelegate -(NSInteger)heightForRow:(NSInteger)row; -(NSInteger)widthForCol:(NSInteger)col; -(NSInteger)numberOfRows:(NSInteger)rows; -(NSInteger)numberOfCols:(NSInteger)cols; -(UIView *)cellForRow:(NSInteger)row col:(NSInteger)col; //get the custom table view to store and dequeue these, i.e. store them in an NSSet when they go offscreen, and give them back when a certain function is called. //There's probably a few functions missing here still. @end @interface doubleTableView: UIScrollView { id&lt;doubleTableViewDelegate&gt; infoDelegate; } //your functions to show and remove cells as needed @end </code></pre> <p>You'll need to work out the rest, but keep updating this page and I'll try to help out. Good luck with this, let me know how it goes.</p>