AQGridView: как настроить маржу UIGridViewCell


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

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

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

AQGridView

2 3

2 ответа:

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

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

Таким образом, вы хотите, чтобы каждая ячейка имела 6-кратное поле, а сама сетка имела еще 6-кратное пространство полей слева и справа от всех ячеек. Есть API для этого:
@property (nonatomic, assign) CGFloat leftContentInset;
@property (nonatomic, assign) CGFloat rightContentInset;
То, что вы должны уметь делать, - это устанавливать myGridView.leftContentInset = 6.0; и myGridView.rightContentInset = 6.0;. Вид сетки будет затем раскладывать ячейки с ширина содержимого 756px вместо 768px, что должно дать вам 6px поля вокруг каждой ячейки. Объедините это с 6px вставками левого и правого содержимого, и вы получите чистое 12px видимое поле между каждой ячейкой и внешними краями представления сетки.

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

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

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