iOS: ряды изображений в ScrollView - PullRequest
0 голосов
/ 22 февраля 2012

Я только начинаю разработку под iOS.Я хотел бы создать представление, которое будет содержать 2 строки эскизов изображений в качестве предварительного просмотра.Это будет прокручивать горизонтально.Мне интересно, если лучший подход будет использовать 2 прокрутки или разместить их в виде таблицы с 2 рядами.

1 Ответ

0 голосов
/ 22 февраля 2012

Если ваши миниатюрные изображения и строки в основном статичны, лучше всего было бы поместить ваши миниатюрные изображения непосредственно в 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];

}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...