我必须将表格的宽度分成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不是确定表大小的合适位置吗?
答案 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];
....
}