我刚刚开始使用iOS开发。我想创建一个包含2行图像缩略图的视图作为预览。它会水平滚动。我想知道最好的方法是使用2个滚动视图还是将它们放在有2行的tableview中。
答案 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];
}
}