繁体   English   中英

iOS:ScrollView中的图像行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM