Немного не так как хочешь, но можно так:
1. Распиливаем вьюшку на горизонтальные полосы высотой 2 высоты кнопки + 10 точек(можно поиграться). По высоте между полосами сделать пропуск в 5 точек.
2. Каждую полосу вертикально разбиваем на ячейки(шириной в кнопку), горизонтальное расстояние между ними выбираем случайно между 5-10, в итоге ячейка имеет ширину кнопки и ее двойную высоту.
3. Кнопку помещаем в ячейку, положение по вертикали выбираем случайно. Итого расстояние как по вертикали так и по горизонтали будет на больше 10, а по горизонтали гарантировано больше 5
4. Повторяем для остальных полос(лучше добавить рандомное начальное горизонтальное смещение для кнопок). В итоге между "соответствующими" кнопками в соседних полосах будет в самом худшем случае 2 высоты кнопки + 25 точек.
4 пункт единственный не удовлетворяет условию. Все это дело можно оптимизировать, чтобы гарантировано прижимать кнопки в полосах к своему соседу сверху.