确定iPad上UITableView的大小

时间:2012-03-14 12:57:55

标签: iphone objective-c ios ipad uitableview

我必须将表格的宽度分成2,3,5,......等份。目的是用2个,3个,5个......等大小的方形子视图填充表格单元格。 (图片) 当然,桌子的高度取决于那个。

这是我确定表格大小的方法,并根据要放置的图像数量来确定。 方法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)。 有趣的是,当设备旋转时,这些值是正确的。 (宽度= 768,身高= 960)

有人对此有解释吗? viewDidLoad不是确定表大小的合适位置吗?

2 个答案:

答案 0 :(得分:1)

Someteimes谈论它 - 在这种情况下写下问题 - 使一切变得不同。

然而,它也可能发生在其他人身上,因此我将问题保留在系统中。这就是答案:

视图被锁定后,

viewDidLoad被称为immediatley。这意味着在大多数情况下它是从Nib文件加载的。我使用的nib文件仅适用于iPhone而不适用于iPad尺寸。 这就是为什么视图维度正是它们在IB中的原因。

我将来自viewDidLoad的调用移动到viewWillAppear并且在那里工作正常。显然,iOS会在viewDidLoad和viewWillAppear的调用之间自动调整iPad的视图(它很好地完成)。

如果有人从学术或文献的角度知道一个更好的地方,我可以拨打电话,那么一个提示非常受欢迎。

然而,现在它似乎工作正常。

答案 1 :(得分:0)

我会将代码切换到方法-viewWillAppear或-viewDidAppear,因为表视图已经完成了任何布局。

UITableView被子类化的另一种可能性是对方法进行子类化:

- (void)layoutSubviews {
    [super layoutSubviews];
    ....
}