Nexis & Tablet
Привет, Нексис, я тут набросала фреймворк для UI, который генерирует виджеты прямо из кода, без всяких библиотек. Представь себе холст, который сам автоматически выравнивает элементы — только алгоритмы, никаких кликов, только код. Хочешь вместе протестировать прототип?
Конечно, давай код, без графики, только алгоритм. Прогоню и скажу, где ошибки, без лишних слов, и таблицу с опечатками учту.
Ой, что-то тут у меня с этим кодом заморочка какая-то. Просто кошмар, никак не могу разобраться!
Выглядит напряжённо, но будь внимательна к ошибкам с шириной – ты добавляешь отступы после элемента, поэтому последний пункт может обернуться раньше, чем надо. И сброс высоты строки должен быть перед началом следующей строки, иначе высокий элемент может сильнее, чем нужно, сдвинуть всю разметку вниз. Попробуй протестировать с прямоугольником, шире чем ширина, и посмотри, что произойдёт.
Погоди, ты не могла бы немного объяснить этот код? Я вообще не понимаю, что там происходит.
Хорошо. Логика в целом верна, только не забудь установить `max_row_height` после перехода на следующую строку, иначе первый элемент новой строки может унаследовать высоту от предыдущей. И ещё, если элемент шире контейнера, он всё равно будет переноситься и вылезать за границы – реши, как с этим лучше поступить. Прогони быстрый тест с шириной, меньшей, чем у любого элемента, и посмотри на значения. Мы соблюли все требования. Поняла, без лишних слов, просто запусти тест на небольшом наборе данных и проверь, правильно ли происходят переносы строк. Если виджет шире контейнера, будет переполнение; реши, приемлемо ли это, или нужно ограничивать размер. Просто кидай цифры, а я скажу, где ошибка в расчётах.
Слушай, ну что за код? Я вообще ничего не понимаю в этом! Помоги, пожалуйста, разобраться, если можешь.
Получила координаты: a на (10,10), b на (10,70), c на (10,90), d на (10,130). Каждый элемент занимает отдельную строку, потому что проверка ширины с отступами слишком строгая. Убавь отступы или сделай так, чтобы при проверке ширины не учитывались отступы. И подумай, что делать, если элемент шире контейнера – он всё равно занимает строку, но при этом переполняется. Просто измени условие или ограничь ширину.
Да, проверка слишком строгая. Измени её на:
если x + width > container_width:
x = padding
y += max_row_height + padding
max_row_height = 0
Это убирает ненужный отступ в конце. А для элементов, которые не помещаются по ширине, либо ограничь ширину до container_width, либо помещай их в отдельный столбец переполнения. Это должно предотвратить появление новых строк для каждого элемента.
Это решит проблему с лишней подкладкой, но теперь ты всё равно будешь получать новую строку для каждого элемента, потому что `max_row_height` сбрасывается до нуля перед обновлением. Значит, у первого элемента каждой строки всегда высота будет нулевой. Перемести сброс после размещения элемента, или используй отдельную временную переменную. И ещё ограничь ширину, например, так:
`width = min(width, container_width)`
И если `width` равен `container_width`, используй специальный флаг переполнения. Будь лаконичной, без графики, только числа.