我想在frame
处获取单元格tableView:cellForRowAtIndexPath:
,以便定位和调整我要添加到UITableViewCell
的{{1}}的视图的大小。但contentView
总是self.frame
。
我知道你可以在(0, 0, 320, 44)
中得到正确的frame
(感谢this answer),但是如果我在那里添加子视图,那么每次重复使用单元格时都会这样做,而不是只有一次像Programmatically Adding Subviews to a Cell’s Content View中的“官方”示例一样。
在该示例中,他们使用硬编码帧添加一些视图,如:
layoutSubviews
我猜这个例子已经过时,因为他们应该使用约束,或者至少使用实际的单元格mainLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, 220.0, 15.0)];
来计算子视图的大小(这可能是不可能在那时获得的)。
注意:这让我想起了Android中使用的view holder设计模式。
答案 0 :(得分:0)
这应该返回边界框架。
CGRect cellFrame = cell.bounds;
然后你可以像
一样使用它cellFrame.size.width;
cellFrame.size.height;
cellFrame.origin.x;
cellFrame.origin.y;
等......虽然origin.x和origin.y应该都是0。
也许您应该在UITableViewCell子类中计算单元格高度并使用
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
在你的代表中找到正确的身高。
答案 1 :(得分:0)
我使用两种解决方案:
我假装框架:
#define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width)
// Use whatever height you like for your cell
// Should be the same value you return in tableView:heightForRowAtIndexPath:
CGFloat cellHeight = XXX;
CGRect frame = CGRectMake(0, 0, SCREEN_WIDTH, cellHeight);
我只是将我的观点和约束添加到self.contentView
。
[someView setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.contentView addSubview:someView];
[self.contentView addConstraints:someConstraints];
但请查看this answer以防万一。