自动将视图放置在下一个逻辑位置(如布局管理器)

|| 我正在开发一个iPad应用程序,它允许用户选择\“ widgets \”出现在屏幕上。屏幕分为两列,小部件将放置在左列或右列中。每个窗口小部件都是一个视图控制器,其宽度固定为静态,但高度随窗口小部件的内容而变化。我正在寻找一种将小部件放置在屏幕上的方法,以便将它们自动放置在下一个逻辑位置-类似于Java中的布局管理器将执行的操作。 我创建了addWidget方法,该方法跟踪每一列中所有小部件的高度。然后将小部件添加到具有最小高度的列中。这行得通,但是我正在寻找一种更优雅的方式来实现这一目标,或者寻求改进当前解决方案的想法。
- (void) addWidget:(UIViewController *)controller {

    if(leftHeight <= rightHeight) {
        controller.view.frame = CGRectMake(20.0, leftHeight, controller.view.bounds.size.width, controller.view.bounds.size.height);
        leftHeight = leftHeight + controller.view.bounds.size.height + 20;
    }

    else {
        controller.view.frame = CGRectMake(self.view.bounds.size.width-controller.view.bounds.size.width-20, rightHeight, controller.view.bounds.size.width, controller.view.bounds.size.height);
        rightHeight = rightHeight + controller.view.bounds.size.height + 20;
    }

    [scrollView addSubview:controller.view];
}
谢谢     
已邀请:
        如果您在窗口小部件的外观类似于“ Springboard”,则建议您查看Three20框架。 它提供了一个
[TTLauncherView][2]
类,可以完全实现您想要的内容,包括分页,图标重新排序以及删除时的抖动效果-就像真正的Springboard一样。一旦您了解了Three20,就非常容易使用。 顺便说一句,这是官方的Facebook应用程序使用的那个... 如果您不想使用Three20,可以简单地看一下实现来决定。     
        我认为这可以使用两个UITableView对象,每个列一个。当您添加新控件时,您仍然需要进行数学运算以确定它进入哪一列,但是您应该有一个更轻松的时间来垂直布置单元格,因为表格视图可以做到这一点。如果您当前正在同时滚动浏览两列,则需要注意每个表格视图的滚动并以编程方式更新另一列。     

要回复问题请先登录注册