如何在后端动态定义 Autolayout

Posted

技术标签:

【中文标题】如何在后端动态定义 Autolayout【英文标题】:How to dynamically define Autolayout on the backend 【发布时间】:2015-10-13 13:00:16 【问题描述】:

我正在构建一个通用的工作流客户端应用程序,它应该使用来自多个源的工作流任务,甚至可以在理想情况下稍后添加,而无需更改应用程序代码。这个想法是应用程序将适应数据结构、类型、UI 和操作元素,理想情况下还可以根据后端定义的某种模式进行布局。

问题:对于布局,我想使用 Size Classes 和 Autolayout 来在不同设备和屏幕尺寸上实现最佳 UX,我正在寻找最佳实践 如何在后端可以动态轻松地转换为带有 UI 元素和 Autolayout 约束的 ViewController 场景,如果可能,还可以使用 Size Classes。

到目前为止:故事板文件似乎只能包含在应用程序包中,因此无法动态添加到应用程序中。我可以考虑使用 Autolayout 视觉格式语言进行约束,但我也愿意接受其他建议。我想保留它的原生 ios 应用程序,完全支持 Adaptibility,并希望避免混合代码 (html/css) 谢谢。

【问题讨论】:

从 API 解析数据以制作 Viewcontollers 和 flow !!听起来不错:D 祝你好运 【参考方案1】:

由于您可以在代码中完成您在 IB 中所做的所有事情,因此您可以从服务器下载一个包含您需要的所有信息的 json。我建议以html作为参考。

假设你创建了一个元素:

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

然后你可以添加约束:

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

]

当您解析它时,您可以轻松构建您的 UI。

【讨论】:

【参考方案2】:

我不认为使用 Storyboards/Autolayout/etc 是正确的后端方法。 您应该定义自己的数据格式来描述您在应用中支持的布局,例如网格。

然后,在您的应用程序中,您创建一个DynamicLayoutViewController(或类似的东西)。在该视图控制器内部,您使用 JSON 数据结构,然后将支持的布局信息从后端翻译到应用中的视图结构中。

这种方法的巨大优势是双重的:

    您不必支持 iOS 的自动布局系统支持的所有内容。您可以使用受控的功能子集。此外,当 Apple 更改其 Autolayout 规范时,您的数据格式不必更改。

    您的数据将适用于除 iOS 之外的其他平台。

此外,如果您不仅想定义 布局,还想定义后端数据结构中的视图和视图控制器之间的交互,那么您正在寻找一款复杂的应用程序!您可能需要考虑创建类似 WorkflowManager 的类来使用和解析您的 JSON。然后它将知道最初显示哪个视图控制器,然后它将处理每个后续操作,因为只有它知道下一步该做什么以及如何对操作做出反应以及接下来要渲染什么。

请记住,您的 JSON 结构越灵活,您的应用程序代码就越复杂。

【讨论】:

以上是关于如何在后端动态定义 Autolayout的主要内容,如果未能解决你的问题,请参考以下文章

php 高级示例如何创建2个自定义字段,按顺序填充它们,将它们作为新列显示在后端顺序列表中并制作它们

php 在后端产品类别列表中显示自定义字段

后端让前端执行某个函数怎么操作

如何整合视觉作曲家自定义wordpress主题

如何在后端运行 QB64

如何在后面的代码中获取使用 Raduploader 动态创建的文本框的值?