2009-08-20 8 views
7

私は、-insertRowsAtIndexPaths:withRowAnimationを使用してテーブルに挿入している数値の行を持っています。残りのセルと区別するために、行を左からインデントしたいと思います。 UITableViewCellのindentationLevelプロパティは、まさに私が必要としているようですが、何もしないようです。ここで私はインデントレベルを設定するために使用しているコードは(ドット構文は違いはありません)です:indentationLevelプロパティは何もしないようですか?

[cell setIndentationWidth:10]; 
[cell setIndentationLevel:1]; 

indentationLevelは私が何をしたいですか、私は他の場所で見てすべきですか?

答えて

0

私が読んだことは、それがあなたがそれをやろうとしていることを示唆していることです。インデントを設定した後、描画する前に、コード内で同じポインタを持つ新しいセルを作成していないことを確認します。あなたは、画面上でもっと目立つような大きめのものにインデントを設定しようとしましたか(たとえば、100ではなく10個)。

+0

あなたがポインタと言うとき、あなたは識別子を参照していないのですか?私の細胞は同じクラスのすべてのオブジェクトなので、それらはすべて同じオブジェクトへのポインタになると思います。しかし、私のセル識別子は完全なindexPathに基づいているため、各セルに固有のものです。しかし、まだインデントのための喜びはありません。 – JoBu1324

+0

私は、セルがOSに返されて表示される前に、セルにインデントレベルと幅が設定されていることを確認しました。何がうまくいかないでしょうか? – JoBu1324

1

あなたのセルでは、その実装がオーバーライドしている可能性があります。

- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
     if (cell == nil) 
     { 
      cell = (UITableViewCell*)[[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"cellType01"] autorelease]; 
      [cell setIndentationLevel:indexPath.row]; 
      [cell setIndentationWidth:10]; 
      cell.selectionStyle = UITableViewCellSelectionStyleNone; 
      // Tag the view 
      [[[cell subviews] objectAtIndex:0] setTag:111]; 
      UILabel* labelView = [[UILabel alloc] initWithFrame: CGRectMake(cell.indentationLevel*cell.indentationWidth, 0, 300, 20)]; 
     } 
    } 
14

にindentationLevelとindentationWidthは、標準項目textLabel、detailTextLabel、およびImageViewの位置決めに影響を与えます。 contentViewのフレームの元には影響しません。

textLabelなどを使用していない場合(おそらくiPhone OS 2をターゲットにしているため)、前の回答が示すように、字下げを手動で処理する必要があります。

1

私のアプリで同様の問題が発生しました。カスタムセルを使用していないUITableViewがありました。私はUITableViewCellを基本スタイルで使用していました。私の- (UITableViewCell *)tableView: cellForRowAtIndexPath:デリゲートメソッドでは、セルのindentationWidthindentationLevelを設定しました。彼らは何もしなかった。私はさらに- (NSInteger)tableView: indentationLevelForRowAtIndexPath:デリゲートメソッドを変更しようとしました。何もない。

最終的には、ストーリーボードに行き、テーブルビューセルそのものの属性を変更することになりました。インデント幅を設定したら、適切なインデントを開始しました。 indentationLevelプロパティが機能し始めました。 - (NSInteger)tableView: indentationLevelForRowAtIndexPath:でも有用でした。

基本的に、indentationWidthのプロパティは、ストーリーボードの「字下げ幅」を無視して無視されます。

これはXcodeの5.0.2これは、カスタムセルを使用していない場合はiOSの7のバグのように見えるのiOS 7

3

をターゲットにしていました。

indentationLevelまたはindentationWidthtableView:cellForRowAtIndexPath:に設定すると、表示するときにセルのレイアウトに影響しません。例えば

、次のコードを考えてみます。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; 

    BOOL isIndented = indexPath.row % 2; 

    cell.textLabel.text = isIndented ? @"Indented" : @"Not indented"; 
    cell.indentationLevel = isIndented; 
} 

を私はスクリーンショットを投稿するのに十分な評判を持っていないが、結果はこれはXcodeの5とiOSを使っているのiOS 6とiOS 7の間に異なっています7 SDK。

+0

解決策または回避策を提供できますか? –

+2

回避策は、デフォルトのセルスタイルをエミュレートする場合でも、カスタムセルを使用することです。ストーリーボードまたはNibファイルを使用しているかどうかに応じて、UITableViewCellの新しいサブクラスを作成するだけで、プロトタイプセルを構成するか、またはセルサブクラスで使用するためにNibファイルをそれぞれ登録します。 – Skyboat

0

私はこの質問は4歳ですけど、あなたはすでにcontentViewのサブビューとして、あなたの意見を追加しているのUITableViewCell、のカスタムサブクラスを使用して、すでにしている場合は、あなたがでlayoutSubviewsをオーバーライドしていないことを確認してくださいあなたの細胞。もしそうなら、コンテンツビューの境界/中心またはフレームを手で調整する必要があります。layoutSubviews

関連する問題