XCode 4界面构建器:更好的处理大量重叠视图的方法

11

在 IB 中,我有许多视图需要显示。其中许多在应用程序加载时是隐藏的,但在按下按钮后会显示出来。这都很好,但是在 IB 中构建此布局非常困难,因为有许多重叠的视图,其中一些是部分透明的(设置为隐藏的视图),而其他的则完全重叠并覆盖其他视图。这使得布局非常困难。

当有许多这样的视图需要布局时,最好的方法是什么?是否有另一种方法可以拆分它们?更好的方法是,我可以完全隐藏一个视图(就像在Photoshop中那样),以便我可以编辑下面的视图,然后再打开该层吗?


我不确定这是否会被视为有帮助或轻率,但根据我的经验,这种特定情况几乎总是突显出一个整体设计问题,直到我在构建和维护时遇到麻烦。重新构想一个更简单的视图结构不仅从工程角度使事情更容易维护,而且通常会带来更好的用户体验。这只是来自实践的想法。对于这个引人思考的问题,我点了个赞。 :-) - Joshua Nozzi
相信我,布局和设计非常简单。只是因为IB与视图的工作方式,它可以完全覆盖其他视图,这使得布局变得困难。我没有数百个视图或任何东西,但即使有3个视图重叠,这也很痛苦。 - Nic Hubbard
4个回答

13

当尝试选择被其他视图遮挡的视图时,另一种选择是使用以下快捷方式:

'ctrl' + 'shift' and click

它会显示光标下所有视图的列表。


8
我不知道有任何方法可以隐藏画布中的对象,但对于复杂的布局,一个有用的技巧是双击左侧文档树中的项目 - 这会选择该项目并将焦点放在画布上,然后您可以使用光标键来微调它的位置。
这并不能解决无法看到物体的问题,因为例如五个或六个标签占据了同一空间,但如果是这种情况,最好的做法可能是只有一个标签,并在代码中更改其内容。

是的,我经常双击它们以使它们获得焦点。只是希望有更多的控制,但也许我太习惯页面布局程序和Photoshop了。 - Nic Hubbard
2
有一个项目并更改其内容是一个好建议,但当涉及到按钮时,我发现这也会变得混乱。那么你就必须同时更改标题和操作。从代码的角度来看,拥有两个不同的按钮似乎更清晰,但在IB中视觉上更混乱。 - morningstar
@morningstar:完全同意。你只需要选择在哪里制造混乱! - jrturton
@jrturton,我非常同意您的观点,使用UILabel是一个好主意,但这并不总是适用于应用程序的工作方式。 - Nic Hubbard

2
我在构建一个带有公园俯视图和可点击热点的应用程序时遇到了这个问题。当点击热点时,会显示一个弹出式UIView,其中包含该公园景点的信息。我在三个公园中使用相同的VC/XIB,这使得XIB变得非常繁忙和难以使用(即您所遇到的同样问题)。详细的UIView使得底部视图难以处理。我的解决方法是选择每个详细的UIView,将其隐藏我想要处理的XIB部分,并在大小检查器中将UIView origin.x添加1000。这将把那些UIView移开一段距离,让我可以对XIB进行必要的操作。完成后,我再将它们向后移动1000个像素。(我只需要将它们水平移出来就可以做我需要做的事情)。
我知道这很笨拙,但考虑到XCode没有方便的方法来隐藏XIB的某些部分,这是我能想到的最快的方法!

答案不太清楚,但您可以在左侧的视图树中使用“shift+click”选择多个视图,并从大小检查器中一次性完成它们。 - wyu

1
IB中处理重叠项的一种方法是:
  1. 确保要隐藏的项组成的视图已分组。

  2. 给这些视图命名:例如ViewOptionA、ViewOptionB和ViewOptionC。可以通过单击树中选择的视图名称,然后键入新名称来完成此操作。

  3. 当您想要隐藏其中一个项目组时:
    a) 通过以下方式之一选择视图:
    i) 在左侧的树中单击它或
    ii) 在布局编辑器中按Ctrl-Shift单击,然后从列表中选择视图。

    b) 在属性检查器中将Alpha设置为0。

  4. 当您想要取消隐藏其中一个项目组时:
    与2)相同,但将Alpha设置回1

[在发布之前,您确实需要记住取消隐藏所有视图!
如果您像我一样健忘,也许您可以子类化UIView并将Alpha设置为1。我还没有尝试过这个子类化的想法。]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接