缩进无法在自定义UITableViewCell上工作

我在我的项目中有一个简单的自定义UITableViewCell,只是将一个编辑操作添加到表中。 一切似乎都很好,但编辑时缩进不起作用,编辑图标与内容重叠。 (更不用说删除button)

缩进不在自定义单元格中工作
自定义单元格是在界面生成器中创build的,具有通常的标准约束,我已经尝试过在类中的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中,在视图和代码中一切看起来都很好。

Cell还具有以编程方式设置的indentationLevel / Width,并将遮罩自动调整为自动宽度。

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

根据build议,我也确保了Cell的内容限制被固定在superview上。

固定边距在左边

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

– 编辑:

我已经手动设置了contentView的背景颜色为黑色,并且发现它在编辑模式下正确缩进,即使不覆盖“layoutSubviews”。 事实上,它有更好的效果。

在这里输入图像说明

但是,正如您所看到的,内容不会缩进。 最初,我把单元格的内容(UIImage)不是contentView的子视图,而是logging了子视图,表明它们是。

 NSLog(@"%@", self.contentView.subviews); "<UIImageView: 0xa477030; frame = (23 7; 31 50); autoresize = TM+BM; userInteractionEnabled = NO; layer = <CALayer: 0xa477090>>" 

我完全失去了为什么这里继续发生。 必须是一些与iOS 6新约束相关的隐藏约束。

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

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

当单元格进入编辑模式时,会调整内容视图的大小以为编辑附件留出空间。 如果你的内容有这些resize的面具,它会随着这个。 上面的layoutSubviews方法很可能会通过将内容视图重新设置为全宽来取消所有这些,因为您正在使用缩进不正确 – 虽然我不能确定问题中的信息。

UPDATE

这是UITableViewCells中的一个限制问题(bug?)。 您可以通过在故事板/界面构build器屏幕中select“文件”选项卡(如果您想在别处使用约束,请使用单元格的单元格)并取消选中“使用Autolayout”,可以返回到自动调整屏蔽:

在这里输入图像说明

这样正确安排你的单元格内容。

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

 - (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]; } } 

取消选中“使用Autolayouts”为我做了诡计。

将tableView边缘插入设置为零

 [self.tableView setSeparatorInset:UIEdgeInsetsZero];