7

我的项目中有一个简单的自定义 UITableViewCell,并且刚刚在表格中添加了一个编辑操作。一切看起来都很好,但是在编辑时缩进不起作用,并且编辑图标与内容重叠。(更不用说删除按钮了)

缩进在自定义单元格中不起作用
自定义单元格是在界面生成器中创建的,像往常一样具有标准约束,我已经尝试过覆盖类中的 layoutSubviews 方法,正如在其他地方提到的,没有运气如下;

(void)layoutSubviews
{
[super layoutSubviews];
float indentPoints = self.indentationLevel * self.indentationWidth;

self.contentView.frame = CGRectMake(
                                    indentPoints,
                                    self.contentView.frame.origin.y,
                                    self.contentView.frame.size.width - indentPoints,
                                    self.contentView.frame.size.height
                                    );
}

我还确认子视图实际上在 contentView 中,并且在视图和代码中一切似乎都很好。

单元格还具有以编程方式设置的缩进级别/宽度,并将掩码自动调整为自动宽度。

作为最后的手段,我可​​以以编程方式创建 UITableViewCell,但不要认为它有帮助。

根据建议,我还确保将单元格内容上的约束固定到超级视图。

左侧固定边距

也没有运气在代码中手动设置 de autoResizingMasks

- 编辑:

我手动将 contentView 的背景颜色设置为黑色,发现它在编辑模式下正确缩进,即使没有覆盖“layoutSubviews”。事实上,它比它更有效。

在此处输入图像描述

但是,如您所见,内容没有缩进。最初我认为单元格(UIImage)的内容不是 contentView 的子视图,而是对子视图进行 nslogging,表明它们是。

NSLog(@"%@", self.contentView.subviews);

"<UIImageView: 0xa477030; frame = (23 7; 31 50); autoresize = TM+BM; userInteractionEnabled = NO; layer = <CALayer: 0xa477090>>"

我完全不知道为什么这种情况一直在这里发生。一定是一些与 iOS 6 新约束相关的隐藏约束。

4

4 回答 4

17

缩进与进入编辑模式时调整内容视图不同。

你是对的,这看起来很简单,通常几乎可以直接开箱即用。通常,您唯一需要更改的是您添加到单元格的组件的自动调整大小掩码。左边的内容应该有一个固定的左边距,右边的内容应该有一个固定的右边距。

当单元格进入编辑模式时,内容视图的大小会调整为编辑附件留出空间。如果您的内容具有这些调整大小的蒙版,它将随之移动。您上面的 layoutSubviews 方法很可能通过将内容视图设置回全宽来撤消所有这一切,因为您错误地使用了缩进 - 尽管我无法从问题中的信息中确定这一点。

更新

这是 UITableViewCells 中的约束问题(错误?)。您可以通过在情节提要/界面构建器屏幕中选择“文件”选项卡(如果您想在其他地方使用约束,请为单元格使用独立笔尖)并取消选中“使用自动布局”,返回自动调整蒙版:

在此处输入图像描述

这会正确排列您的单元格内容。

于 2012-10-11T06:50:16.907 回答
0

您可以尝试这些功能并解决它们:

- (void)willTransitionToState:(UITableViewCellStateMask)state {
 [super willTransitionToState:state];

 if ((state & UITableViewCellStateEditingMask) || (state & UITableViewCellStateShowingDeleteConfirmationMask)) {
  [UIView beginAnimations:nil context:NULL];
  [UIView setAnimationDuration:0.3];
  label.alpha = 0.0;

// LayoutSubview 代码 [UIView commitAnimations]; } }

- (void)didTransitionToState:(UITableViewCellStateMask)state {
 [super didTransitionToState:state];

 if (!(state & UITableViewCellStateEditingMask) && !(state & UITableViewCellStateShowingDeleteConfirmationMask)) {
  [UIView beginAnimations:nil context:NULL];
  [UIView setAnimationDuration:0.5];
  label.alpha = 1.0;
// LayoutSubview code
  [UIView commitAnimations];
 }
}
于 2012-10-11T06:50:09.180 回答
0

取消选中“使用自动布局”对我有用。

于 2013-04-21T09:19:59.163 回答
0

将 tableView 边缘插入设置为零

[self.tableView setSeparatorInset:UIEdgeInsetsZero];
于 2014-07-24T06:18:53.190 回答