确定iPad上UITableView的尺寸
我必须将表格的宽度分为2,3,5等等部分。目的是用2,3,5,...等大小的方形子视图填充表格单元格。 (图片) 当然,桌子的高度取决于此。确定iPad上UITableView的尺寸
这是我如何确定表的大小,并根据要放置的图像数来划分它。 numberOfPicsPerRow方法返回用户选择在表格的每一行中显示的图像数量的整数值。
- (CGFloat) rowHeight{
fcAppAppDelegate *delegate = (fcAppAppDelegate *);
CGRect bounds = self.tableView.bounds;
//CGRect bounds = self.view.bounds; // Alternative that returns the same result.
float tableWidth;
if (UIInterfaceOrientationIsPortrait([[UIApplication sharedApplication] delegate].tabBarController.interfaceOrientation))
tableWidth = bounds.size.width;
else
tableWidth = bounds.size.height;
NSLog (@"tableWidth: %f", tableWidth);
return tableWidth/[MatrixPhotoListTVC noOfPicsPerRow];
}
这是我设置的第一次表的行高:
- (void)viewDidLoad
{
[super viewDidLoad];
self.tableView.rowHeight = [self rowHeight];
}
一切工作正常在iPhone上。然而,在iPad上,tableView.bounds或view.bounds返回(width = 320,heiht = 372)。 有趣的是,当设备旋转时,这些值是正确的。 (width = 768,height = 960)
有没有人对此有过解释? viewDidLoad不是确定表格大小的合适位置吗?
Someteimes谈到它 - 在这种情况下写这个问题 - 使所有的差异。
但是,它也可能发生在其他人身上,因此我将问题保留在系统中。这就是答案:
viewDidLoad在视图被封装后被称为immediatley。这意味着在大多数情况下它是从一个Nib文件加载的。我使用的笔尖文件仅为iPhone设计,而不适用于iPad尺寸。 这就是视图尺寸正是它们在IB中的原因。
我把viewDidLoad中的调用移到了viewWillAppear,它在那里工作正常。显然,iOS会在viewDidLoad和viewWillAppear的调用之间自动调整iPad的视图(它很好)。
如果有人从学术或文献的角度来看我可以发出电话的更好的地方,那么我们将非常感谢他们提示。
但是,现在它似乎工作正常。
我会将代码切换到方法-viewWillAppear或-viewDidAppear,因为任何布局已经由表视图完成。
如果UITableView的子类是继承是该方法的另一种可能:你这样做是正确的
- (void)layoutSubviews {
[super layoutSubviews];
....
}
谢谢。这不是太晚了吗?我将设置tableView的行高,因为标准值不适合。 – 2012-03-14 15:03:17
你是对的 - (void)viewDidLoad是一个更好的地方。我的代码有一个自定义的UITableView和单元格,当表视图重新加载时需要布局,因此我改用上述方法。但是这只有在你已经分类了UITableView的情况下才有意义。如果可能的话,管理控制器中的所有内容是应该的。修正了我的答案,让它成为可能性,而不是比给出的第一个解决方案更合适的选择。 – Conor 2012-03-15 08:27:04
。在'viewDidLoad:'视图刚刚加载时,它与您在IB中创建的视图相同,包括大小。然后,在将视图添加到视图层次结构之前,将根据自动调整屏蔽来调整视图大小,然后调用viewWillAppear:,然后添加视图。这就是为什么'viewDidLoad:'dimension *应该*对当前视图层次结构正确。 – Pascal 2012-03-14 13:23:03