Как динамически определять Autolayout на бэкэнде

Я создаю общее клиентское приложение рабочего процесса, которое должно использовать задачи рабочего процесса из нескольких источников, которые в идеале могут быть добавлены позже, без изменения кода приложения. Идея заключается в том, что приложение будет адаптироваться к структуре данных, типам, пользовательскому интерфейсу и элементам действий, а в идеале также к макету на основе какой-либо схемы, определенной в бэкэнде.

Вопрос: Для макета я хочу использовать классы размеров и, очевидно, Autolayout для достижения наилучшего UX на разных устройствах и экранах разных размеров, и я ищу лучшие методики описания макета на бэкэнде, который можно динамически и легко преобразовать в сцены ViewController с помощью пользовательского интерфейса. элементы и ограничения Autolayout и, если возможно, классы размеров.

Пока что: кажется, что файлы раскадровки могут быть включены только в комплект приложения, поэтому они не могут быть добавлены в приложение динамически. Я могу подумать об использовании языка визуального формата Autolayout для ограничений, но я открыт и для других предложений. Я хочу оставить его родным приложением для iOS с полной поддержкой Adaptibility и хочу избежать гибридного кода (html/css). Спасибо.

2 ответа

Решение

Я не думаю, что использование Storyboards/Autolayout/etc является подходящим подходом для бэкенда. Вы должны определить свой собственный формат данных для описания макетов, которые вы поддерживаете в своем приложении, например, сетку.

Затем в своем приложении вы создаете DynamicLayoutViewController (Или что-то вдоль этих линий). Внутри этого контроллера представления вы используете свою структуру данных JSON, а затем переводите информацию о поддерживаемом макете из серверной части в структуру представления в своем приложении.

Огромное преимущество этого подхода имеет два аспекта:

  1. Вам не нужно поддерживать все, что поддерживает система Autolayout iOS. Вы можете работать с управляемым подмножеством функций. Кроме того, формат данных не должен изменяться, когда Apple меняет свою спецификацию Autolayout.

  2. Ваши данные будут работать с другими платформами, кроме iOS.

Кроме того, если вы хотите не просто определить макет, но даже взаимодействие между представлениями и контроллерами представлений в вашей структуре данных бэкэнда, вы смотрите на одно сложное приложение! Вы можете рассмотреть возможность создания чего-то вроде WorkflowManager класс, который будет потреблять и анализировать ваш JSON. Затем он будет знать, какой контроллер представления должен первоначально отображаться, и затем он будет обрабатывать каждое последующее действие, потому что только он будет знать, что делать дальше и как реагировать на действия и что отображать дальше.

Имейте в виду, что чем более гибкой будет ваша структура JSON, тем сложнее будет становиться код вашего приложения.

Поскольку вы можете делать все, что вы делаете в IB, в коде, вы можете скачать json с сервера со всей необходимой информацией. Я предлагаю взять HTML в качестве ссылки.

Допустим, вы создали элемент:

"type" : "UIView",
"backgroundColor" : "red",
"id" : "3123",
"subviews" : [ ... here you can defines more views under...]

И тогда вы можете добавить ограничения:

"constraints" : [
"top" : {
         "toElement" : "parent",
         "constant" : "50"

}]

Когда вы анализируете его, вы можете легко создать свой пользовательский интерфейс.

Другие вопросы по тегам