2012-02-26 2 views
3

Я пытаюсь реализовать AQGridView в своем приложении для iPad. Пожалуйста, см. Мое изображение ниже - извините за сильные цвета, но я думаю, что это поможет вам понять мою проблему.AQGridView: Как настроить UIGridViewCell margin

Каждая ячейка (синяя коробка) имеет поле слева и справа (желтый цвет), то есть 8 пикселей. Это означает, что первый желтый цвет имеет ширину 8 пикселей, второй 16 пикселей, третий 16 пикселей и последние 8 пикселей. В некоторых ситуациях это может быть прекрасно, но я хотел бы, чтобы желтые столбцы имели одинаковую ширину. В моем примере общая ширина столбцов равна 48 (8 + 16 + 16 + 8), поэтому вместо этого каждый столбец должен иметь ширину 12 (48/4). Как я могу изменить AQGridView для этого?

Я попытался изменить фрейм и отскока в AQGridView, но это ничего не делать.

AQGridView

ответ

6

AQGridView фактически принимает координаты зрения контейнера и создает строго определенную сетку из этого. Поэтому, когда у вас есть сетка с разрешением 768 пикселей и элементы, которые немного меньше 1/3 от ширины, тогда он создаст жесткую сетку, в которой можно разместить эти предметы. По умолчанию ваши изображения AQGridViewCell будут центрироваться в пределах каждого квадрата сетки (хотя вы можете позвонить -setResizesCellWidthToFit:YES, чтобы изменить это); вы можете настроить это позиционирование, выполнив -gridView:adjustCellFrame:withinGridCellFrame: в своей реализации AQGridViewDelegate.

В вашем случае каждая отдельная ячейка имеет край 8px с левой и правой сторон. На внешних краях это видно только один, но между парами он кажется удвоенным до 16px (8px из каждой ячейки).

Таким образом, для каждой ячейки требуется 6px-маржа, а для самой сетки - еще 6px поля пробела слева & справа от всех ячеек. Там в an API for this:

@property (nonatomic, assign) CGFloat leftContentInset; 
@property (nonatomic, assign) CGFloat rightContentInset; 

То, что вы должны быть в состоянии сделать, это установить myGridView.leftContentInset = 6.0; и myGridView.rightContentInset = 6.0;. Затем в виде сетки выкладываются ячейки с шириной содержимого 756 пикселей вместо 768 пикселей, что должно дать вам 6 пикселей по каждой ячейке. Объедините, что с 6px оставил & правые вставки содержимого, и у вас будет чистый видимый запас 12px между каждой ячейкой и внешними краями сетки.

Боковое примечание: Свойства вставки содержимого были созданы, чтобы помочь с выделением определенного количества ячеек в строке. Например, 1024 не делит на 5, так что это может привести к тому, что некоторые довольно маленькие ячейки будут довольно разбросаны, поскольку сетка макета будет содержать только 4 элемента по ширине. Однако, добавив левые & правые вставки содержимого по 2 пикселя каждый, представление будет использовать ширину 1020 для вычисления его сетки макета, в результате чего 5 ячеек в строке. Фактически, это именно то, что мы делаем в приложении iPad Kobo при повороте в ландшафтном режиме; без этого изменения наш портретный режим 4 пункта на строку только что разбросал &, это выглядело немного редкими.

+1

Спасибо за ваш тщательный ответ. Использование свойств 'leftContentInset' и' rightContentInset' решило мою проблему, обеспечив фиксированное поле маржа слева и справа. То, о чем я не упоминал в вопросе, поскольку я думал, что это будет более общее решение (например, изменение границ GridView или что-то еще), было как сделать то же самое сверху и снизу. У вас есть решение для этого? – dhrm

+1

Yep-inset AQGridView немного в своем родительском представлении; o) В качестве альтернативы, я думаю, что теперь есть свойство UIEdgeInsets на самом экране сетки, которое поддерживает назначение верхних и нижних вложений так же, как слева и справа сверху. –

0

мне удалось получить больший контроль на горизонтальном и вертикальном расстоянии с помощью метода portraitGridCellSizeForGridView и возвращение немного большим CGRect по сравнению с той, которую я использовал для инициализации ячейки в методе gridView:cellForItemAtIndex:.

Надеюсь, это поможет.