自定义 UITableViewCell 子视图布局
Posted
技术标签:
【中文标题】自定义 UITableViewCell 子视图布局【英文标题】:Custom UITableViewCell subview layout 【发布时间】:2010-09-16 20:56:40 【问题描述】:我正在创建一个自定义的UITableViewCell
,其风格类似于UITableViewCellStyleValue1
,但右侧有一个可编辑的文本字段,而不是detailTextLabel
。我对如何正确调整编辑字段的大小有点困惑。我想考虑textLabel
的长度以及contentView
的大小,并且当它的表格视图处于编辑模式时,或者如果附件视图(如添加了披露箭头)。
但contentView
的宽度似乎总是 320(在 iPhone 的纵向模式下),即使对于分组表也是如此。在我的UITableViewCell
子类中,我看不到访问它所属的表格视图的方法,因此我可以获取表格的样式并相应地调整边距。
我认为我可以在 tableView 的委托 -tableView:willDisplayCell:forRowAtIndexPath:
方法中以自定义方式处理此问题,但这完全违背了拥有可重用单元类的目的。
我必须在这里遗漏一些关键概念,但我不知所措。有人吗?
谢谢! 兰迪
【问题讨论】:
【参考方案1】:您可能希望在 UITableViewCell 子类中控制布局。例如:
- (void)layoutSubviews
CGRect b = [self bounds];
b.size.width += 30; // allow extra width to slide for editing
b.origin.x -= (self.editing) ? 0 : 30; // start 30px left unless editing
[contentView setFrame:b];
// then calculate (NSString sizeWithFont) and addSubView, the textField as appropriate...
//
[super layoutSubviews];
【讨论】:
我错过了 [super layoutSubviews];那些对我来说预先大小的东西。谢谢,乔丹。【参考方案2】:我认为边距是单元格的一部分,而不是表格,所以这就是 contentView 总是 320 宽的原因。可能我没看懂问题。
【讨论】:
如果表格视图是普通样式,从视觉上看,单元格占据了表格的整个宽度。但是,在分组样式中,视觉上,两边都有 10 像素的边距。但是,在单元格子类中,我如何确定是否在任一侧使用这额外的 10 像素边距? 哦,我不确定。尝试检查indendationLevel
或indentationWidth
,它们在分组和普通上可能不同。以上是关于自定义 UITableViewCell 子视图布局的主要内容,如果未能解决你的问题,请参考以下文章
点击单元格后不同的 UITableViewCell 子视图布局
何时何地根据实际宽度更新 UITableViewCell 子视图的约束