[英]iOS: Rows of images in ScrollView
我才刚刚开始iOS开发。 我想创建一个包含2行图像缩略图的视图作为预览。 它会水平滚动。 我想知道最好的方法是使用2个滚动视图还是将它们放置在具有2行的表格视图中。
如果您的缩略图和行本质上是静态的,那么最好的选择是将缩略图视图直接放到scrollView中。 您可以通过任意计算将缩略图子视图分为两行,并根据需要安排任意多的列,并避免使用UITableView(这对于滚动行非常有用,但它本身不支持列,而工具是“ (对于此特定工作,最好)。
如果确实选择使用UITableView,则将其放入单个UIScrollview中。...除非您专门查找两个离散滚动的行,否则我不会使用两个UIScrollViews来实现。
这是一个建议方法的代码段。 考虑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];
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.