2012-02-22 17 views
1

私はUITableViewを持っていますが、現在はその中に単一のセルがあります。私はいくつかのカスタム図面を行うためにUITableViewCellから継承するカスタムTableViewCellクラスを作成しました。テーブルの幅を希望するサイズに設定して、セルの幅を同じサイズに設定しようとしているので、テーブルの幅全体がいっぱいになります。問題は、セルの左右にいくつかのマージンがあるように見えますが、その理由はわかりません。iOS UITableViewが予期せず余白を追加する

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

答えて

1

tableViewは「グループ化」スタイルを使用していますか?グループ化されたスタイルでは、通常、iOSは表のセルに左右のマージンを追加します。

これを解決するには、tableViewのフレームをスーパービューの少し外側に調整してください。 See here for example in previous question

+0

それは問題でした。私が期待していたように、IBでいくつかの微調整をしています。ありがとう! – mayonaise

1

です。 (あなたがそれをやっていないならば)細胞は自動的に全空間を占めるように設計されています。 (横方向)

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

セルを割り当てるときに、セルのフレームを設定するにはどうすればよいですか。

編集:ハードコードされたフレームサイズを使用する代わりに、self.frameを使用してください。さらに、フレームを設定した最後のステートメントを削除します。

+0

initWithFrameは廃止されて以来、私はセルのフレームで何をすべきか正確にはわかりませんでした。 initWithStyleに渡されたスタイルを変更しても何も影響しないようです。 [この質問](http://stackoverflow.com/questions/5996775/resizing-a-uitableviewcell-frame-issue)の回答の1つは、グループ化されたテーブルでは、セルの幅が少しテーブルの幅より狭い。私はこれを試さなければならないでしょう – mayonaise

0

私が使用した別の代替ソリューション。

@ jonkrollのソリューションは動作しますが、私の必要性を満たしません。私は余白を左右に保ちたいが、通常のセルでそれらを削除したい、テーブルビューにヘッダーセクションがあります。

私が行った解決策は、カスタムテーブルビューセルでlayoutSubViewsメソッドを実装することでした。このメソッド内で、contentViewの幅を表のセルの幅と同じに設定します。

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

これは非常に遅いかもしれませんが、同じ問題が発生する人もいます。 )

+0

このようにフレームプロパティを直接設定することはできません。新しいフレームを作成する必要があります。とにかく、私のためにうまくいかなかった。セルが空白になった –

関連する問題