如何在后端动态定义Autolayout
How to dynamically define Autolayout on the backend
我正在构建一个通用的工作流客户端应用程序,它应该使用来自多个源的工作流任务,理想情况下,这些任务甚至可以在以后添加,而无需更改应用程序代码。这个想法是应用程序将适应数据结构、类型、UI 和操作元素,理想情况下还可以根据后端定义的某种模式进行布局。
问题: 对于布局,我想使用 Size 类 显然是 Autolayout 以在不同设备和屏幕尺寸上实现最佳 UX,我正在寻找最佳实践如何描述后端布局,可以动态轻松地转换为具有 UI 元素和自动布局约束 的 ViewController 场景,如果可能,大小 类 .
到目前为止:故事板文件似乎只能包含在应用程序包中,因此无法动态添加到应用程序中。我可以考虑使用 Autolayout 视觉格式语言来进行约束,但我也愿意接受其他建议。我想保留它的原生 iOS 应用程序,完全支持适应性,并希望避免混合代码 (html/css) 谢谢。
由于您可以用代码完成在 IB 中所做的一切,因此您可以从服务器下载一个 json,其中包含您需要的所有信息。我建议以html作为参考。
假设您创建了一个元素:
"type" : "UIView",
"backgroundColor" : "red",
"id" : "3123",
"subviews" : [ ... here you can defines more views under...]
然后你可以添加约束:
"constraints" : [
"top" : {
"toElement" : "parent",
"constant" : "50"
}
]
当你解析它时,你可以很容易地构建你的UI。
我不认为使用 Storyboards/Autolayout/etc 是正确的 backend 方法。
您应该定义自己的数据格式来描述您在应用中支持的布局,例如网格。
然后,在您的应用中,您创建一个 DynamicLayoutViewController
(或类似的东西)。在该视图控制器内部,您使用 JSON 数据结构,然后 将您支持的布局信息从后端转换为应用程序中的视图结构。
这种方法的巨大优势是双重的:
您不必支持 iOS 的自动布局系统所支持的所有内容。您可以使用受控的功能子集。此外,当 Apple 更改其自动布局规范时,您的数据格式不必更改。
除了 iOS.
,您的数据将适用于其他平台
此外,如果您不仅要定义 布局 ,还要定义后端数据结构中的视图和视图控制器之间的交互,那么您正在寻找一个复杂的应用程序!您可能需要考虑创建类似 WorkflowManager
class 的内容,它将使用和解析您的 JSON。然后它会知道最初显示哪个视图控制器,然后它会处理每个后续动作,因为只有它会知道接下来要做什么以及如何对动作做出反应以及接下来要渲染什么。
请记住,JSON 结构越灵活,您的应用程序代码就必须变得越复杂。
我正在构建一个通用的工作流客户端应用程序,它应该使用来自多个源的工作流任务,理想情况下,这些任务甚至可以在以后添加,而无需更改应用程序代码。这个想法是应用程序将适应数据结构、类型、UI 和操作元素,理想情况下还可以根据后端定义的某种模式进行布局。
问题: 对于布局,我想使用 Size 类 显然是 Autolayout 以在不同设备和屏幕尺寸上实现最佳 UX,我正在寻找最佳实践如何描述后端布局,可以动态轻松地转换为具有 UI 元素和自动布局约束 的 ViewController 场景,如果可能,大小 类 .
到目前为止:故事板文件似乎只能包含在应用程序包中,因此无法动态添加到应用程序中。我可以考虑使用 Autolayout 视觉格式语言来进行约束,但我也愿意接受其他建议。我想保留它的原生 iOS 应用程序,完全支持适应性,并希望避免混合代码 (html/css) 谢谢。
由于您可以用代码完成在 IB 中所做的一切,因此您可以从服务器下载一个 json,其中包含您需要的所有信息。我建议以html作为参考。
假设您创建了一个元素:
"type" : "UIView",
"backgroundColor" : "red",
"id" : "3123",
"subviews" : [ ... here you can defines more views under...]
然后你可以添加约束:
"constraints" : [
"top" : {
"toElement" : "parent",
"constant" : "50"
} ]
当你解析它时,你可以很容易地构建你的UI。
我不认为使用 Storyboards/Autolayout/etc 是正确的 backend 方法。 您应该定义自己的数据格式来描述您在应用中支持的布局,例如网格。
然后,在您的应用中,您创建一个 DynamicLayoutViewController
(或类似的东西)。在该视图控制器内部,您使用 JSON 数据结构,然后 将您支持的布局信息从后端转换为应用程序中的视图结构。
这种方法的巨大优势是双重的:
您不必支持 iOS 的自动布局系统所支持的所有内容。您可以使用受控的功能子集。此外,当 Apple 更改其自动布局规范时,您的数据格式不必更改。
除了 iOS.
,您的数据将适用于其他平台
此外,如果您不仅要定义 布局 ,还要定义后端数据结构中的视图和视图控制器之间的交互,那么您正在寻找一个复杂的应用程序!您可能需要考虑创建类似 WorkflowManager
class 的内容,它将使用和解析您的 JSON。然后它会知道最初显示哪个视图控制器,然后它会处理每个后续动作,因为只有它会知道接下来要做什么以及如何对动作做出反应以及接下来要渲染什么。
请记住,JSON 结构越灵活,您的应用程序代码就必须变得越复杂。