Objective-C自动调整子视图

时间:2010-09-10 19:41:30

标签: iphone objective-c uiview

我正在寻找一种iPhone应用程序的方法,该方法将根据该视图中的可用空间自动调整UIViews的子视图Y值。我会尽力解释而不会太混乱。

我有一个容纳最多3个子视图的容器视图。在每个子视图中都有一个从容器视图中删除子视图的按钮,当子视图被删除时,我想调整剩余的子视图以占用被删除的子视图打开的任何空间。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您需要做的第一件事就是向容器发出已删除子视图的信号。

然后,您可以获取已删除视图的高度值,将其除以剩余子视图的数量,然后展开剩余子视图的高度。

然后将第一个剩余的子视图设置为Y坐标0,将第二个(如果有的话)设置为第一个子视图高度值的Y坐标

答案 1 :(得分:1)

一种方法是使您的包装器视图成为自定义UIView子类。在该子类中,维护子视图的单独NSMutableArray,其中每个子视图的数组索引对应于它在屏幕上的位置。

有了这个,你有几个选择。一个是覆盖didAddSubview:基于要添加的子视图的框架,您可以确定子视图的位置,并在数组中的相应索引处插入对子视图的引用。

更清洁的选项是实现您自己的自定义方法,如下所示:

- (void)insertSubview:(UIView *)subview atPosition:(NSInteger)position;

其中position是一个索引,用于标识子视图应填充的“槽”。您可以在此方法中显式设置子视图的框架,以及受插入影响的任何其他子视图。然后将子视图插入到相应索引处的数组中。

最后,覆盖willRemoveSubview:。在其中,您可以在数组上使用indexOfObject:来查找要删除的子视图的位置。然后只需调整其后面的所有子视图的帧,并从阵列中删除子视图。

(另一个替代方法是跳过数组,只使用tag属性来指示每个子视图的位置。我不喜欢这个选项。使用tag属性做任何事情总是对我来说感觉像是一个可怕的黑客。)