2012-02-22 108 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