2012-02-22 63 views
1

我有一个UITableView,目前它有一个单元格。我编写了一个自定义的TableViewCell类,它继承自UITableViewCell以执行一些自定义绘图。我已经将表格的宽度设置为所需的大小,并试图将单元格的宽度设置为相同的大小,因此它将填满表格的整个宽度。问题似乎是我在单元的左右两侧留有一些边距,我不知道为什么。iOS UITableView意外增加边距

Here's an example of the problem. 我使TableView背景变黑更清晰。 TableView是正确的大小。背景图像被添加到单元格中,而不是表格,并且它应占据表格的整个宽度。

我试图让TableView变宽(与屏幕一样宽)以尝试适应背景图像的大小,但这并不完全。我宁愿找出这些利润来自哪里,以及如何摆脱它们。

TableView本身在Interface Builder中初始化。样式设置为分组,滚动禁用,视图模式设置为缩放至填充。

这里的电池类的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;                      
} 

回答

1

是你的tableView使用“分组”风格吗?对于分组样式,iOS通常会为表格单元添加左右边距。

可以通过调整tableView的框架来略微超出其超视图范围来解决这个问题。 See here for example in previous question

+0

这就是问题所在。随着IB的调整,它按照我的预期工作。谢谢! – mayonaise 2012-02-22 02:22:33

1

你不应该明确设置您单元的框架(大小),但申报其风格。 (如果你不这样做)单元格被设计为自动占据整个空间。 (水平)

cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 

如果不是在分配您的细胞时,您如何设置细胞的框架?

编辑:代替使用硬编码帧大小,使用self.frame。此外,删除设置框架的最后一条语句。

+0

由于initWithFrame已被弃用,我不确定如何处理单元格的框架。更改传递给initWithStyle的样式似乎不会影响任何内容。 在[这个问题](http://stackoverflow.com/questions/5996775/resizing-a-uitableviewcell-frame-issue)中的答案之一表明,对于任何分组表格,细胞的宽度将是一个小窄于表格的宽度。我得试试这个 – mayonaise 2012-02-22 02:03:53

0

我使用的另一种替代解决方案。

@ jonkroll的解决方案确实有效,但它不能满足我的需求。我在表格视图中有一个标题部分,我希望按原样保留左右边距,但要在正常单元格上将其删除。

我做的解决方案是在自定义表格视图单元格中实现layoutSubViews方法。在此方法中,将contentView的宽度设置为等于表格单元格的宽度。

-(void)layoutSubviews { 
    self.contentView.frame.size.width = self.frame.size.width; 
} 

这可能会很晚,但我认为有些人也会遇到同样的问题。希望这个解决方案适用于你们:)

+0

您不能像这样直接设置框架属性,您必须创建一个新框架。无论如何,没有为我工作。该单元格变为空白 – 2013-09-24 19:59:13