«Обычный» способ решения этой проблемы состоит в том, чтобы сказать, что всегда будет N столбцов (реже всегда N строк). Тогда проблема состоит в том, чтобы взять число элементов, разделив их на N, и это число строк, которые у вас есть (плюс один, если есть остаток).
Изменение размера сетки создает запутанный пользовательский интерфейс. Пользователи не поймут, почему размер сетки постоянно меняется. Они не будут удивляться этому, но будут смущены, казалось бы, случайными изменениями.
Если вы все еще хотите сделать то, что говорите, я думаю, вам нужно определить свою проблему немного лучше. Есть ли максимальное количество предметов, которые можно уместить на сетке? Есть ли максимальное количество столбцов, которые вы позволите? Например, если вы разрешите 50 элементов, должны ли они быть в 25 строках по 2 элемента? 5 рядов по 10 штук? 10 рядов по 5 штук?
В какой-то момент вам придется либо прокрутить горизонтально, либо сказать: «Максимальное количество столбцов - X». И если вы собираетесь навязать это максимальное количество столбцов, то лучше просто сказать: «Всегда будет X столбцов».
Если нет веской причины для создания сетки с переменным измерением, которую вы просите, вам лучше просто зафиксировать количество столбцов. Это делает для тривиально простой код, а не какой-то сложный взлом, и предоставляет гораздо более согласованный интерфейс для ваших пользователей.