Iphone 如何在iPad上的分组UITableViewCell中将视图居中?
我正在将一个iPhone应用程序转换为iPad,我陷入了一个无辜的、看似微不足道的定位问题。我有一个UITableViewCell,它只包含一个UISwitch,位于单元格的中心。单元格位于具有分组样式的UITableView中 在iPhone上,我只是将开关的center属性设置为Iphone 如何在iPad上的分组UITableViewCell中将视图居中?,iphone,objective-c,cocoa-touch,ipad,uitableview,Iphone,Objective C,Cocoa Touch,Ipad,Uitableview,我正在将一个iPhone应用程序转换为iPad,我陷入了一个无辜的、看似微不足道的定位问题。我有一个UITableViewCell,它只包含一个UISwitch,位于单元格的中心。单元格位于具有分组样式的UITableView中 在iPhone上,我只是将开关的center属性设置为tableView:cellforrowatinexpath:中单元格的中心。这对于iPhone来说就足够了,因为不管桌子的样式如何,电池的中心都是一样的。这种情况也发生在iPhone上,但偏移量较小,因此差异更微妙
tableView:cellforrowatinexpath:
中单元格的中心。这对于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:
,现在它位于中心的另一侧(靠近屏幕右侧)
}
然而,当我记录我感兴趣的各种坐标和帧时,我得到了我所期望的:单元格中心的x坐标是384.0,是屏幕宽度的一半。我还尝试重新计算UISwitch的整个框架,但由于我使用了屏幕的值,因此开关最终位于同一位置,太偏右了
我认为在调用tableView:willDisplayCell:forrowatinexpath:
之后(甚至之前)会有一些转换,以使所有这些数字变得毫无意义。看起来整个单元格几乎都移动了x,其中x是从屏幕边缘到单元格开始的距离,即使frame
属性中没有报告这一点
我肯定我遗漏了一些琐碎的东西。请告诉我。这可能不是最优雅的解决方案,当然也没有开始深入探讨为什么事情不是你所期望的那样,会与tableCell视图发生冲突,而是
view.center =CGPointMake(tableView.center.x-(view.frame.size.width/2), cell.center.y) ;
如果你使用这一行而不是你所发布的那一行,它应该很高兴(至少在我的快速测试中看起来是这样的)把这个开关放在表中间。 分组单元的工作方式稍有不同。我也遇到过类似的问题,但你们是在假设中心的情况。有时,为各种不同的视图(cell.backgroundColor、cell.contentView.backgroundColor等)临时设置背景色将帮助您更好地显示背景色
您可能需要执行以下操作:s.center = CGPointMake(s.superview.bounds.size.width / 2.0,s.center.y);
如果这不起作用,我相信你是对的,它在渲染时对坐标做了一些改变。如果是这种情况,那么您必须编写自己的UITableViewCell子类,这并不是世界上最糟糕的事情。center属性是在其superview的坐标系中测量的。cell.contentView是交换机的超级视图,而不是单元格。您是否尝试过使用cell.contentView.center而不是cell.center?也许可以检查单元格的框架和单元格的contentView之间是否存在差异。尝试了。contentView和单元格都有相同的边界。但是你说得对,cell.center不是正确的值。自从我回到iPhone后,我已经更新了代码,并注意到了同样的问题,只是更微妙。我以前在tableview单元格中遇到过问题,尤其是在分组tableview中。您可以做的是创建UITabeVIEW单元格的子类,并重写LayOutSubVIEW方法。尝试将AutoReTurm掩码设置为“无”,以使其保持在中间。
s.center = CGPointMake(s.superview.bounds.size.width / 2.0,s.center.y);