iOS UITableView意外添加了边距

时间:2012-02-22 01:42:09

标签: ios uitableview ios4

我有一个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;                                                                                     
}   

3 个答案:

答案 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; 
}

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