2017-10-06 82 views
0

我正在研究一个练习应用程序,其中用户界面取决于练习的类型。一些练习将问题作为文本和答案作为文本。一些练习将问题作为文本和答案作为图像。还有一个变化是图像和文字的问题和答案中的图像。我根据从API获得的值为特定练习创建一个问题对象。该对象具有许多可选的字段。例如,图像是可选的。现在我面临的挑战是处理这种动态UI的最佳方式是什么。用简单的英语,如果它有图像,显示imageView,如果它没有图像,则不要显示imageView并相应地调整其他UI元素。相同视图控制器的UI的多个变体

回答

1

您可以拥有一个UIViewController子类和许多不同的故事板,每个故事板都有不同的布局和子视图。

  • 每个故事板都将视图控制器的类设置为身份检查器中的自定义类。

  • 您的视图控制器具有所有可能的子视图的出口,并且每个故事板将其子视图连接到与其相关的出口。

  • 当您需要呈现字符串的特定变体时,您可以从特定于案例的故事板(以编程方式或使用segues和storyboard引用)实例化视图控制器。


如果您只需要在一种情况下禁用一个特定的子视图,您可以执行下列操作之一:

  • 设置子视图的isHidden属性false。它会留在原地,并占据同一区域,但看不见。
  • 通过致电removeFromSuperview()将其从主视图中删除。但是,如果其他剩余的子视图依赖于针对其布局移除的子视图的约束,请注意。
+0

非常感谢您的回复。但我有个问题。假设您有两种视图变体:一种是imageView,另一种是没有imageView的。如果我们为它创建两个故事板,是不是会矫枉过正?因为其余的东西都是一样的,但是我们仍然会为它们创建重复的出口,因为它们在不同的故事板中。如果我在错误的方向思考,请纠正我。 –

+0

在这种特殊情况下,你可以做几件事情,比如将'isHidden'属性的值更改为'false',将它从超级视图中移除(这会影响其他子视图的自动布局成本)。查看更新后的答案。 –

+0

isHidden解决方案的问题是它仍然占据空间,它不会显示它。如果我想去removeFromSuperview路线,我必须确保没有其他视图依赖于它。对?你认为stackView会是一个很好的解决方案吗?因为即使你删除了一个元素,stackview也可以自行调整。 –

相关问题