我是堆叠溢出和可可触摸开发的新手。
我正在尝试使用带有多行detailTextLabel的UITableViewCellSytleValue2来构建UITableViewCell。
因此我实现了tableView:heightForRowAtIndexPath:就像那样:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
if (indexPath.row != 4) {
return tableView.rowHeight;
}
NSString *text = toDoItem.note;
UIFont *font = [UIFont systemFontOfSize:[UIFont systemFontSize]];
CGSize withinSize = CGSizeMake(167, 1000);
CGSize size = [text sizeWithFont:font constrainedToSize:withinSize lineBreakMode:UILineBreakModeCharacterWrap];
CGFloat height = size.height + 26;
return height;
}
我发现detailTextLabel的宽度大约是167px,但想要完全知道它并且不喜欢硬编码(考虑方向改变)。
我试图访问detailTextLabel的框架或边界,但它的宽度返回0.0。
感谢您的帮助!
答案 0 :(得分:0)
创建自定义单元格
答案 1 :(得分:0)
您可以在UITableViewCell的自定义实现中定义一组静态变量,只有在未设置的情况下,才会在 layoutSubviews
中设置这些类型的参数。请务必先拨打[super layoutSubviews]
。
这样你就可以继承设备的默认设置了,你永远不必怀疑
AFAIK,单元格宽度为 self.contentView.frame.size.width
。您可以在每个之间使用self.textLabel.frame.size.width
和self.detailTextLabel.frame.size.width
以及self.accessoryView.frame.size.width
+填充来确定详细信息。我不是100%的填充。但是,您可以通过检测标签宽度和contentView框架宽度之间的差异来计算填充。
对不起。我忘了细胞的detailTextLabel
尺寸总是在不断变化;绝对不能依赖于时期。您可以根据拥有的UIViewController和单元格textLabel
的宽度派生标签宽度。由于计算是在控制器级别,您将知道tableView是否已分组。如果是这样,您可以简单地将宽度缩小0.8倍左右,并减去textLabel
宽度。
同样适用于字体:self.textLabel.font.pointSize
和self.detailTextLabel.font.pointSize
。