我有一个UITableView,目前它有一个单元格。我编写了一个自定义的TableViewCell类,它继承自UITableViewCell,以便进行一些自定义绘图。我已将表格的宽度设置为所需的大小,并尝试将单元格的宽度设置为相同的大小,因此它将填充表格的整个宽度。问题似乎是我在单元格的左侧和右侧有一些边缘,我不知道为什么。
Here's an example of the problem. 我使TableView背景变黑更清晰。 TableView的大小正确。背景图像被添加到单元格而不是表格中,它应占据表格的整个宽度。
我尝试使TableView更宽(与屏幕一样宽)以尝试适应背景图像的大小,但这并不能完全实现。我宁愿弄清楚这些边缘的来源,以及我如何摆脱它们。
TableView本身在Interface Builder中初始化。样式设置为Grouped,滚动被禁用,视图模式设置为Scale To Fill。
这是单元类'initWithStyle方法
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
// Initialization code
_primaryLabel = [[UILabel alloc] init];
_primaryLabel.textAlignment = UITextAlignmentLeft;
_primaryLabel.font = [UIFont systemFontOfSize:18];
_primaryLabel.backgroundColor = [UIColor clearColor];
_detailLabel = [[UILabel alloc] init];
_detailLabel.textAlignment = UITextAlignmentLeft;
_detailLabel.font = [UIFont systemFontOfSize:12];
_detailLabel.backgroundColor = [UIColor clearColor];
_icon = [[UIImageView alloc] init];
[self.contentView addSubview:_primaryLabel];
[self.contentView addSubview:_detailLabel];
[self.contentView addSubview:_icon];
self.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
UIImageView* whiteDisclosureView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 15, 13)];
[whiteDisclosureView setImage:[UIImage imageNamed:@"white_disclosure.png"]];
self.accessoryView = whiteDisclosureView;
UIImageView * background = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 305, 61)];
[background setImage:[UIImage imageNamed:@"button_silver.png"]];
[self setBackgroundView:background];
self.backgroundColor = [UIColor clearColor];
self.frame = self.contentView.frame = CGRectMake(0, 0, 305, 61);
}
return self;
}
答案 0 :(得分:1)
您不应该明确设置单元格的框架(大小),而是声明其样式。 (如果您还没有这样做)单元格设计为自动占据整个空间。 (水平)
cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
如果不是,在分配单元格时,如何设置单元格的框架?
编辑:而不是使用硬编码的帧大小,请使用self.frame
。另外,删除设置框架的最后一个语句。
答案 1 :(得分:1)
您的tableView是否使用“分组”样式?对于分组样式,iOS通常会为表格单元格添加左右边距。
可以通过将tableView的框架调整到稍超出其superview的范围来解决这个问题。 See here for example in previous question
答案 2 :(得分:0)
我使用的另一种替代解决方案。
@ jonkroll的解决方案确实有效,但它无法满足我的需求。我在表视图中有一个标题部分,我希望保持左右边距,但是想在正常单元格中删除它们。
我所做的解决方案是在自定义表格视图单元格中实现layoutSubViews方法。在此方法中,将contentView的宽度设置为表格单元格的宽度。
-(void)layoutSubviews {
self.contentView.frame.size.width = self.frame.size.width;
}
这可能很晚,但我认为有些人也会遇到同样的问题。希望这个解决方案对你们有用:)