自定义单元格是在界面构建器中创建的,像往常一样使用标准约束,我已经尝试在类中替换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中,并且View和Code中的一切看起来都很好.
Cell还以编程方式设置了indentationLevel / Width,并将掩码自动调整为自动宽度.
作为最后的手段,我可以以编程方式创建UITableViewCell,但不认为它可以提供帮助.
根据推荐,我还确保将单元格内容的约束固定到superview.
还可以在Code中手动设置de autoResizingMasks,但没有运气
–
编辑:
我已手动将contentView的背景颜色设置为黑色,并发现它在编辑模式下正确缩进,即使没有覆盖“layoutSubviews”.事实上,用它做得更好.
但是,正如您所看到的,内容不会缩进.最初我认为单元格的内容(UIImage)不是contentView的子视图,但是对子视图进行了记录,显示它们是.
NSLog(@"%@",self.contentView.subviews); "<UIImageView: 0xa477030; frame = (23 7; 31 50); autoresize = TM+BM; userInteractionEnabled = NO; layer = <CALayer: 0xa477090>>"
我完全迷失了为什么这种情况在这里不断发生.必须是一些与iOS 6新约束相关的隐藏约束.
解决方法
你是对的,这看起来很简单,通常几乎可以直接使用.通常,您需要更改的唯一内容是添加到单元格的组件的自动调整掩码.左边的内容应该有一个固定的左边距,右边的内容应该有一个固定的右边距.
当单元格进入编辑模式时,内容视图的大小会被调整,以便为编辑附件留出空间.如果您的内容具有这些调整大小的掩码,它将与此一起移动.上面的layoutSubviews方法很可能通过将内容视图设置回全宽来撤消所有这些,因为您正在使用缩进错误 – 尽管我无法从问题中的信息中确定这一点.
UPDATE
这是UITableViewCells中存在约束的问题(bug?).您可以通过选择故事板/界面构建器屏幕中的“文件”选项卡返回自动调整掩码(如果您想在其他地方使用约束,请为单元格使用独立的笔尖)并取消选中“使用Autolayout”:
这会正确排列您的细胞内容.