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`, используй специальный флаг переполнения. Будь лаконичной, без графики, только числа.
Ой, Маш, ты это смотрела? Там такой код, даже не представляешь! Ну, типа, раскладывает элементы, чтобы всё красиво помещалось. Посмотри, что там за параметры и как оно работает, я не совсем разобралась. Там как-то с шириной контейнера и отступами, прямо заморочки!