AQGridView: как настроить поле UIGridViewCell - PullRequest
3 голосов
/ 26 февраля 2012

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

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

Я пытался изменить frame и bounce AQGridView , но это ничего не дало.

AQGridView

Ответы [ 2 ]

6 голосов
/ 28 февраля 2012

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

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

Таким образом, вы хотите, чтобы у каждой ячейки было поле в 6px, а для самой сетки - еще 6px поля поля слева и справа от всех ячеек. Для этого есть API :

@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 ячейкам в строке. На самом деле это именно то, что мы делаем в приложении Kobo для iPad при повороте в альбомный режим; без этого изменения наш портретный режим, 4 элемента в строке, просто растянулся и выглядел слишком скудным.

0 голосов
/ 01 апреля 2012

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

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

...