Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何在iPad上的分组UITableViewCell中将视图居中?_Iphone_Objective C_Cocoa Touch_Ipad_Uitableview - Fatal编程技术网

Iphone 如何在iPad上的分组UITableViewCell中将视图居中?

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上,但偏移量较小,因此差异更微妙

我正在将一个iPhone应用程序转换为iPad,我陷入了一个无辜的、看似微不足道的定位问题。我有一个UITableViewCell,它只包含一个UISwitch,位于单元格的中心。单元格位于具有分组样式的UITableView中

在iPhone上,我只是将开关的center属性设置为
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);