我正在将一个 iPhone 应用程序转换到 iPad,但我遇到了一个无辜且看似微不足道的定位问题。我有一个 UITableViewCell,它只包含一个以单元格为中心的 UISwitch。该单元格位于具有 Grouped 样式的 UITableView 中。
在 iPhone 上,我只是将开关的中心属性设置为 tableView:cellForRowAtIndexPath:
中单元格的中心。 这对 iPhone 来说已经足够了,因为无论表格样式如何,单元格的中心都是相同的。 这也发生在 iPhone 上,但偏移量较小,因此差异更细微。这是 iPhone 的代码:
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
UISwitch *view = [[UISwitch alloc] initWithFrame:CGRectZero];
[view addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged];
view.center = cell.center;
cell.selectionStyle = UITableViewCellSelectionStyleNone;
[cell.contentView addSubview:view];
[view release];
在 iPad 上,无需更改任何代码,开关的位置仍然位于 iPhone 屏幕的中央。这很糟糕,因为 iPad 比 iPhone 大得多。所以我将定位代码移动到 tableView:willDisplayCell:forRowAtIndexPath:
,现在它位于中心的另一侧(靠近屏幕右侧)。
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
UISwitch *s = (UISwitch *)[cell.contentView viewWithTag:SwitchTag];
s.center = CGPointMake(cell.contentView.center.x,s.center.y); //pushes the switch too far to the right
然而,当我记录我感兴趣的各种坐标和帧时,我得到了我所期望的:单元格中心的 x 坐标为 384.0,它是屏幕宽度的一半。我也尝试过重新计算 UISwitch 的整个框架,但由于我使用的是屏幕的值,所以开关最终位于同一个位置,太靠右了。
我认为是在 tableView:willDisplayCell:forRowAtIndexPath:
被调用之后(或之前,甚至)进行一些转换,使所有这些数字变得毫无意义.看起来好像整个单元格都移动了 x,其中 x 是从屏幕边缘到单元格开始的距离,即使没有报告在 frame
属性中。
我确定我遗漏了一些微不足道的东西。请赐教。
最佳答案
它可能不是最优雅的解决方案,当然也不会开始深入了解为什么事情不在您期望的地方而扰乱 tableCell View 的潜在行为但是
view.center =CGPointMake(tableView.center.x-(view.frame.size.width/2), cell.center.y) ;
如果您使用那一行而不是您发布的那一行,它应该很高兴(至少在我的快速测试中看起来是这样)将那个开关放在表格的中间。
关于iphone - 如何在 iPad 上将 View 置于分组的 UITableViewCell 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7013104/