Iphone UITableViewCell内容四处移动

Iphone UITableViewCell内容四处移动,iphone,ios,objective-c,uitableview,Iphone,Ios,Objective C,Uitableview,我有一个iPhone应用程序,其中我使用UITableView格式化一组文本响应,每行一个。我在故事板中设置了一个单元格,使其内部有一个标签,并设置了一个约束,表示标签应该距离单元格边缘10点。然后,我设置了一个自定义子类UITableViewCell,将故事板中的单元格设置为该类,并连接了插座 但是,在某些情况下,当我加载表格时,我会看到单元格中的文本稍微向右移动:当我选择单元格时,或者当我将其他单元格加载到表格中时。事实上,在后一种情况下,有时所有东西都会向右移动,即使是已经存在的细胞 这到

我有一个iPhone应用程序,其中我使用UITableView格式化一组文本响应,每行一个。我在故事板中设置了一个单元格,使其内部有一个标签,并设置了一个约束,表示标签应该距离单元格边缘10点。然后,我设置了一个自定义子类
UITableViewCell
,将故事板中的单元格设置为该类,并连接了插座

但是,在某些情况下,当我加载表格时,我会看到单元格中的文本稍微向右移动:当我选择单元格时,或者当我将其他单元格加载到表格中时。事实上,在后一种情况下,有时所有东西都会向右移动,即使是已经存在的细胞

这到底是怎么回事?我在
tableView:cellforrowatinexpath:
中所做的唯一更改是对标签中的文本进行更改,并且我总是对其进行设置。我在情节提要的单元格中取消了“编辑时缩进”的设置


回答一些问题:我正在使用故事板设置视图。Xcode没有报告任何约束的模糊性。此外,以下是之前和之后的屏幕截图:


我猜标签的约束是不明确的。含糊不清会使UI组件由于无法解释的原因而跳转。可能需要为标签设置更多约束,以定义其在两个轴上的位置


或者,您可能只需将标签设置为IB中编辑器菜单下的“适合内容的大小”(固有内容大小)。

如果您有一个自定义子类
UITableViewCell
,请尝试实现
layoutSubviews
。让我从头顶上试试:

static CGFloat const kLeftMargin = 10.0f;

- (void) layoutSubviews
{
  [super layoutSubviews];

  /* Prepare for processing */
  CGSize cellSize = self.bounds.size;

  /* Change the textLabel frame */
  {
    /* Compute the new label frame */
    CGSize labelSize = self.textLabel.bounds.size;
    CGFloat xCoor = kLeftMargin;
    CGFloat yCoor = roundf((cellSize.height - labelSize.height) / 2.0f);
    CGRect labelFrame = CGRectMake(xCoor, yCoor,
                                   labelSize.width, labelSize.height);

    /* Set the new label frame */
    self.textLabel.frame = labelFrame;
  }
}

现在,这不是通常推荐的做法(因为很多人都使用故事板和NIB),但根据经验,如果您希望完成一些正确的布局,请实现
layoutSubviews

您是否向UITableViewCell添加了新标签,或者正在使用其中已经存在的文本标签?如果添加了一个新的,请考虑移除它,并使用该单元格现有的TeTabLabor属性。如果出于某种原因这不是一个选项,请仔细检查您添加的标签是否位于单元格的contentView中,以及所有约束是否都是相对于父视图而不是相对于单元格本身的


此外,为了进行调试,您可以将单元格的contentView背景颜色设置为红色(cell.contentView.backgroundColor=[UIColor redColor];)-这可能会让您更好地了解移动的内容、标签或整个视图。

这只是一个猜测,没有看到您的代码。我曾经遇到过一个类似的问题,当应用程序重用现有单元格时,标签的尺寸不正确。因此,在添加新标签之前,我必须删除CellForRowatineXpath方法中的旧标签。下面是我如何删除旧的一个:

UIView *oldLabel = [cell viewWithTag:3];
if (oldLabel != nil)
{
    [oldLabel removeFromSuperview];
}
然后我添加了一个新标签,如下所示:

[cell.contentView addSubview:newLabelOrWhatever];

检查字符串内容的前缀是否没有空格可能是值得的。此外,您还可以通过设置背景色来验证标签的实际位置。

当选择单元格时,标签将移动时,我遇到了类似的问题。这是一个自定义单元格,我正在从自定义笔尖加载

在Nib中,我没有将UITableViewCell(超类)的背景视图设置为任何视图。一旦我设置了它(我将它设置为ContentView),问题就停止了


我的自动布局约束似乎很好,没有问题,所以我假设是上面的解决方案解决了问题。

您能给我们看一些代码吗。。特别是您正在设置nsconstraint的部分(您是以编程方式还是通过故事板进行设置?),您是否可以在移动前和移动后放置一些单元格外观的屏幕截图?您是否可以将有问题的视图和视图控制器分开,将其放入新项目并共享其源代码?@dpassage能否显示customCell的代码以及如何将单元格放入表格视图:CellForRowatineXpath:同意,我们需要在“CellForRowatineXpath”方法中查看代码。当应用程序重用现有的表单元格时,与创建新的表单元格时,可能会发生一些不同的情况?Xcode没有报告任何不明确的约束,也没有收到任何与约束相关的日志消息,因此可能不是这样。将标签设置为内在内容大小似乎没有意义,因为表中的每一行标签中都有不同的文本。Xcode不会自动报告不明确的约束。您必须在视图上调用hasAmbiguousLayout。当标签设置为其固有内容大小时,它会根据其内容(即其文本)的大小自动调整其大小。Bilobatum,我不希望标签更改大小。我遇到的整个问题是它在四处移动。好的,我添加了代码,遍历表中的每个单元格,查找
hasAmbiguousLayout
为真的标签。没有。