iOS:ScrollView中的图像行

时间:2012-02-22 15:09:19

标签: iphone ios uiscrollview

我刚刚开始使用iOS开发。我想创建一个包含2行图像缩略图的视图作为预览。它会水平滚动。我想知道最好的方法是使用2个滚动视图还是将它们放在有2行的tableview中。

1 个答案:

答案 0 :(得分:0)

如果您的缩略图图像和行基本上是静态的,那么最好的选择可能是将缩略图图像视图直接拖放到scrollView中。您可以根据需要将缩略图子视图布局为两行和多列,并进行一些任意计算,并避免使用UITableView(这对于滚动行非常有效,但本身不支持列,并且作为工具不是'对于这项特殊的工作来说,这是最好的。)

如果你确实选择使用UITableView,我会把它放到一个UIScrollview中......除非你专门寻找两个离散滚动的行,否则我不会用两个UIScrollView来实现它。

这是一个建议方法的代码段。考虑1)所有子视图应该是相同的大小2)子视图将根据包含视图的边界“网格”自己。我为常规UIView(不是UIScrollView)编写了这个片段,但概念将是相同的:考虑scrollContent的大小。考虑有多少子视图水平放置,以及有多少子视图垂直放置(因此,如果你想要2行,滚动视图高度应该足够高以完全包含单个子视图的高度* 2):

- (void)layoutSubviews
{

//Lays out subviews in a grid to fill view.
float myWidth = self.bounds.size.width;
float myHeight = self.bounds.size.height;

if ([[self subviews] count] < 1) 
{
    return; //no subviews, must be added before layoutSubviews is called.
}

CGRect aSubviewRect = [[[self subviews] objectAtIndex:0] frame];

int numberOfColumns = (int)(myWidth / aSubviewRect.size.width);
float actualColumnWidth = myWidth / (float)numberOfColumns;
CGFloat paddingPerColumn = (actualColumnWidth - aSubviewRect.size.width);

int maxRows = (int)(myHeight / aSubviewRect.size.height);
int qtyOfViews = [[self subviews] count];
int numberOfRows = (qtyOfViews / numberOfColumns);
if ((qtyOfViews % numberOfColumns) > 0) //we need remainder row
{
    ++numberOfRows;
}

if (numberOfRows > maxRows)
{
    numberOfRows = maxRows;
    NSLog(@"More rows required than fit.");
}

float actualRowHeight = myHeight / (float)numberOfRows;
CGFloat paddingPerRow = (actualRowHeight - aSubviewRect.size.height);

for (UIView *aSubview in [self subviews])
{
    int viewIndex = [[self subviews] indexOfObject:aSubview];
    int rowIndex = (viewIndex /  numberOfColumns);
    CGFloat yOrigin = (roundf(((float)rowIndex * aSubviewRect.size.height) + (((rowIndex + 1) * paddingPerRow) / 2)));
    int columnIndex = (viewIndex % numberOfColumns);
    CGFloat xOrigin = (roundf(((float)columnIndex * aSubviewRect.size.width) + (((columnIndex + 1) * paddingPerColumn) / 2)));

    CGRect frame = [aSubview frame];
    frame.origin.y = yOrigin;
    frame.origin.x = xOrigin;
    [aSubview setFrame:frame];

}
}