What we have?
UI можно определить как набор вьюх, которые отображают данные, реагируют на события и при этом каким-то определенным образом расположены на экране.
Как мы размещаем элементы на экране?
- Qt предлагает использовать контейнеры, умеющие внутри себя располагать элементы определенным образом. Вкладывая эти контейнеры друг в друга, можно получить необходимую расстановку.
- WPF/XAML предлагает аналогичные контейнеры.
- Android предлагает аналогичные контейнеры + систему констреинтов.
- iOS предлагает Autolayout. Нужно описать набор ограничений (уравнений), непротиворечиво и однозначно описывающих расположение элементов. Решив систему уравнений с этими ограничениями, движок получит координаты и размеры элементов.
- У Delphi есть anchors: прибивание краев к контейнеру. Очень похоже на resizing masks в iOS.
- В web на сколько я понимаю используется вкладывание друг в друга контейнеров, поведение которых описывается стилями.
What problem with this?
We need to use code for special cases
Описанные инструменты заточены под типовые случаи, зачастую мы не можем (или можем, но это сильно неудобно) описать расположение какого-то элемента с помощью этих инструментов. Приходится делать это в коде. Логика описания layout'а размазывается по нескольким местам.
Должен быть способ лучше.