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