我正在开发一款iPad应用程序,允许用户选择“小部件”显示在屏幕上。屏幕分为两列,小部件将放在左列或右列中。每个小部件都是一个视图控制器,具有静态固定宽度,但根据小部件的内容而变化的高度。我正在寻找一种方法将小部件放在屏幕上,以便它们自动放置在下一个逻辑位置 - 类似于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];
}
由于
答案 0 :(得分:1)
我认为这可以使用两个UITableView对象,每个对应一个。当你来添加一个新的控件时,你仍然需要做数学来决定它进入哪个列,但你应该有一个更容易的时间来垂直布局单元格,因为表格视图可以做到这一点。如果您当前正在同时滚动两个列,则需要观察每个表格视图滚动并以编程方式更新另一个列。
答案 1 :(得分:1)
如果您正在为您的小部件提供类似“跳板”的视图,我建议您查看Three20框架。
它提供了一个[TTLauncherView][2]
类,可以实现您正在寻找的内容,包括分页,重新排序图标以及删除时的抖动效果 - 就像真正的Springboard一样。一旦你学会了Three20,它就很容易使用。
顺便说一句,它是官方Facebook应用程序使用的那个......
如果你不想使用Three20,你可以简单地看一下实现,以便下定决心。