セルをインデントしないようにするには - shouldIndentWhileEditingRowAtIndexPathは効果がありません

私は、カスタムセルを持つプレーン(グループ化されていない)tableViewを持っていて、編集ボタンを押すとセルがインデントされます。私はそれを望んでいない、私は削除記号が私の細胞の上に横たわるようにしたい。

私はshouldIndentWhileEditingRowAtIndexPathとcell.shouldIndentWhileEditin = NOを試しました。 cell.indentionLevel = -3と同様ですが、どちらも効果がありません。どんな考え?

これは私のセットアップのためでしょうか?私はこのチュートリアルに従いました。また、 Davydはここで提案しました。しかし、最後のことはまだ私の細胞をインデントするだけでなく、それはさらに悪化させました私がDoneを押すと、インデントされた。そして、私は全体の細胞をカバーする背景イメージを得ることができない...

だから誰も、削除と移動のサインを表示しながら、意図的なテーブルビューでカスタムセルを意図的に止める方法を知っていますか?

// EDIT: btw、私はIBでカスタムセルをビルドします。 「編集中にインデントする」というチェックマークを消すことはできますが、それは気にしません。インデントレベルと幅の値を変更できますが、効果はありません。私が編集アクセサリーを変更すると、それはうれしく表示されます。 希望は助ける..

ありがとう!

2

7 答え

多くの研究とピクセル単位の試みが行われた後、元の状態から元のサイズに「移行」するために - (void)layoutSubviews を使用する必要がありました。これを行うには、私のCustomCell.mに配置された私のコードです:

- (void)willTransitionToState:(UITableViewCellStateMask)aState
{
[super willTransitionToState:aState];
self.state = aState;
}


- (void)layoutSubviews
{
[super layoutSubviews];
// no indent in edit mode
self.contentView.frame = CGRectMake(0,                                          
                                    self.contentView.frame.origin.y,
                                    self.contentView.frame.size.width, 
                                    self.contentView.frame.size.height);

if (self.editing )        
{
    NSLog(@"subview");
    float indentPoints = self.indentationLevel * self.indentationWidth;

    switch (state) {
        case 3:
            self.contentView.frame = CGRectMake(indentPoints,
                                                self.contentView.frame.origin.y,
                                                self.contentView.frame.size.width +124,// - indentPoints, 
                                                self.contentView.frame.size.height);   

            break;
        case 2:
           //swipe action
            self.contentView.frame = CGRectMake(indentPoints,
                                                self.contentView.frame.origin.y,
                                                self.contentView.frame.size.width +75,// - indentPoints, 
                                                self.contentView.frame.size.height);   

            break;
        default:
           //state == 1, hit edit button
            self.contentView.frame = CGRectMake(indentPoints,
                                                self.contentView.frame.origin.y,
                                                self.contentView.frame.size.width +80,// - indentPoints, 
                                                self.contentView.frame.size.height);  
            break;
        }
    }
}

希望が助ける:)

5
追加された

上記のどれも私にとってはうまくいかないが、これは:

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return UITableViewCellEditingStyleNone;
}

このようにして、UITableViewへのあなたの言うことは、編集モードのときにネイティブスタイルを必要とせず、代わりに自分でそれを処理することができます。

3
追加された
これは正しいものです
追加された 著者 Dima Deplov,
これは私のために働いた唯一のものです
追加された 著者 stackOverFlew,

セルを編集するときにデリゲートメソッド tableView:shouldIndentWhileEditingRowAtIndexPath:が呼び出されていることを確認しましたか?

私が tableView:shouldIndentWhileEditingRowAtIndexPath:デリゲートメソッドを使用した唯一の時間 それは正常に働いた。

// Override to prevent indentation of cells in editing mode (in theory)
- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath {
    return NO;
}
2
追加された
iOS 6のプレーンなテーブルビューで shouldIndentWhileEditingRowAtIndexPath デリゲートメソッドを試してみました。
追加された 著者 Joseph Lin,
shouldIndentWhileEditingが呼び出されますが、これはグループ化されたtableViewsでのみ機能し、私のプレーンはプレーンなので、/:
追加された 著者 Nareille,
100%私が探していたもの、ありがとうございました
追加された 著者 anders,

コンテンツビューの自動サイズ変更マスクまたはセル内の要素を変更してみてください。インデントは、セルが編集モードに入ると、コンテンツビューがサイズ変更されてアクセサリが表示され、コンテンツが一緒に移動するためです。

セルの内容を知らなくても具体的なアドバイスをするのは難しいですが、固定された左または右のマージンを見たいと思っています。

1
追加された
私のセルにはボタンと2つのラベルが含まれていますが、インデントされていないcell.contentView.backgroundColorに画像を設定します。私は、IBのサイズインスペクタで赤線と赤線のさまざまな組み合わせを試みましたが、今のところ希望する効果はありませんでした。私は正しい組み合わせを見逃しましたか?ありがとうございました。
追加された 著者 Nareille,
画像、ボタン、およびラベルはインデントされます。私が言ったように、赤い線をトグルすることは効果がありません:(私は、CustomCellとボタンやラベルを試しました。実際には、セルが右にインデントされているように見えます。移動標識を表示するためのものである。
追加された 著者 Nareille,
それは、単に動作していない背景イメージ、またはラベルとボタンですか?私は反対の問題を抱えていましたが、私はカスタムレイアウトを持っていました。私はそれをインデントしたいのですが、それはありませんでした。そして、自動サイズ設定は私のためにそれを並べ替えました。
追加された 著者 jrturton,

ちょうどiOS 6でこれを試しました。

shouldIndentWhileEditingRowAtIndexPath デリゲートメソッドは、プレーンテーブルビューでも機能するようになりました。

----編集済み-----

Well, as it turned out, it doesn't indent only if allowsMultipleSelection = YES

0
追加された
iOS 8での単一選択でも機能しません
追加された 著者 Dima Deplov,

私も同じ問題がありました。理由は、インデントされていませんが、自動サイズ変更されているためです。削除ボタンが表示され、セルのビュー(およびそのサブビュー)のサイズが変更されます。

解決策は次のとおりです。必要に応じて、InterfaceBuilder/Xcodeでカスタム表のセルのサブビュー(ラベルまたはそれに配置したもの)の自動サイズ変更動作を設定します。

0
追加された

UIViewをbackgroundViewコンセントに接続すると、移動しませんことがわかりました。自動サイズ変更フラグと組み合わせることは、本当に必要なだけのものだと私は思います。

0
追加された