2

カスタムセルを含むプレーンな(グループ化されていない)tableViewがあり、[編集]ボタンを押すと、セルがインデントされます。私はそれを望んでいません。削除サインをセルのすぐ上に置きたいのです。

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

これは私の設定が原因でしょうか?私はこのチュートリアルに従い、 Davydがここで提案したようなセットアップも試しましたが、最後はセルをインデントしただけでなく、Doneを押すとセルがインデントされたため、さらに悪化しました..そしてできませんセル全体を覆う背景画像を取得します...

それで、削除と移動のサインを表示しながら、プレーンなテーブルビューのカスタムセルを意図しないようにする方法を知っている人はいますか?

//編集: ところで、IB でカスタム セルを作成します。「編集中にインデント」というチェックマークを外すことができますが、気にしません。インデント レベルと幅の値を変更できますが、効果はありません。編集アクセサリを変更すると、喜んで表示されます。それが役立つことを願っています..

ありがとう!

4

7 に答える 7

5

多くの調査とピクセルごとの試行の後、-(void)layoutSubviews元の状態から元のサイズに「移行」するために使用する必要があることが判明しました。 .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;
        }
    }
}

それが役立つことを願っています:)

于 2011-12-01T13:49:28.020 に答える
3

上記のどれも私にとってはうまくいきませんでしたが、これはうまくいきました:

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

このように、編集モードではネイティブ スタイルは必要なく、代わりに自分で処理できることを UITableView に伝えます。

于 2014-03-09T17:17:32.203 に答える
2

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

デリゲートメソッドを使用したのは、tableView:shouldIndentWhileEditingRowAtIndexPath:それがうまく機能したときだけでした。

// Override to prevent indentation of cells in editing mode (in theory)
- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath {
    return NO;
}
于 2011-10-28T11:30:32.433 に答える
1

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

セルに何が入っているかを知らずに具体的なアドバイスをするのは難しいですが、固定された左または右の余白を見たいと思います。

于 2011-10-28T09:53:00.037 に答える
0

これをiOS 6で試してみました。

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

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

結局のところ、インデントしないのは次の場合のみです。allowsMultipleSelection = YES

于 2012-10-22T21:17:14.723 に答える
0

UIView を backgroundView アウトレットに接続すると、まったく動かないことに気付きました。それを自動サイズ変更フラグと組み合わせるだけで、本当に必要なことがすべてだと思います。

于 2012-08-13T06:54:42.163 に答える
0

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

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

于 2011-11-25T10:33:52.117 に答える