我正在寻找一种iPhone应用程序的方法,该方法将根据该视图中的可用空间自动调整UIViews的子视图Y值。我会尽力解释而不会太混乱。
我有一个容纳最多3个子视图的容器视图。在每个子视图中都有一个从容器视图中删除子视图的按钮,当子视图被删除时,我想调整剩余的子视图以占用被删除的子视图打开的任何空间。
提前感谢您的帮助!
答案 0 :(得分:1)
您需要做的第一件事就是向容器发出已删除子视图的信号。
然后,您可以获取已删除视图的高度值,将其除以剩余子视图的数量,然后展开剩余子视图的高度。
然后将第一个剩余的子视图设置为Y坐标0,将第二个(如果有的话)设置为第一个子视图高度值的Y坐标
答案 1 :(得分:1)
一种方法是使您的包装器视图成为自定义UIView子类。在该子类中,维护子视图的单独NSMutableArray,其中每个子视图的数组索引对应于它在屏幕上的位置。
有了这个,你有几个选择。一个是覆盖didAddSubview:基于要添加的子视图的框架,您可以确定子视图的位置,并在数组中的相应索引处插入对子视图的引用。
更清洁的选项是实现您自己的自定义方法,如下所示:
- (void)insertSubview:(UIView *)subview atPosition:(NSInteger)position;
其中position
是一个索引,用于标识子视图应填充的“槽”。您可以在此方法中显式设置子视图的框架,以及受插入影响的任何其他子视图。然后将子视图插入到相应索引处的数组中。
最后,覆盖willRemoveSubview:。在其中,您可以在数组上使用indexOfObject:
来查找要删除的子视图的位置。然后只需调整其后面的所有子视图的帧,并从阵列中删除子视图。
(另一个替代方法是跳过数组,只使用tag
属性来指示每个子视图的位置。我不喜欢这个选项。使用tag
属性做任何事情总是对我来说感觉像是一个可怕的黑客。)