2017-04-19 10 views
0

UITableViewには、白色のセクションヘッダーと暗いセルがあります。表の背景も白です。表がバウンスされたときにセクションヘッダが素敵に見えるように、これが行われます。行アクションが表示されていると、UITableViewの背景がセルの下に表示されます

enter image description here

私は、この表の行にアクションのカップル(UITableViewRowAction)を追加しました。しかしながら、一つの問題がある:私は、行編集アクションを表示するためにスワイプ場合行が、暗いので、最初のアクションの間に白い空隙がある:

enter image description here

(注は、そのセルおよびそのコンテンツビューの両方XIBファイルに同じ暗い背景色が設定されていることを確認してください)。

ビューの階層を調べた後、アクションボタンが表示された後にセルが縮小され、このギャップを通って見えるのは実際のテーブルビューです。私は他のすべてのビューの下にそれにカスタム背景ビューを追加しようとしたテーブルビューの背景変更することはできませんので

:しかし

self.tableBackgroundView = [[UIView alloc] initWithFrame:self.tableView.bounds]; 
self.tableBackgroundView.backgroundColor = [UIColor redColor]; 
self.tableBackgroundView.autoresizingMask = UIViewAutoresizingFlexibleSize; 
[self.tableView addSubview:self.tableBackgroundView]; 
[self.tableView sendSubviewToBack:self.tableBackgroundView]; 

を、それがうまく動作しませんでした。

セルとその編集アクションの間の空白を「隠す」方法はありますか?

+0

@KKRocksあなたは何を意味するのですか? editとclearボタンについては、 'UITableViewRowAction'です:https://developer.apple.com/reference/uikit/uitableviewrowaction – iosdude

+0

はい私は知っていますが、私はこのボタンを追加する方法を知っておきたいと思います。だから私はあなたの問題を理解することができます。 – KKRocks

答えて

0

私は、tableView:willDisplayCell:(各セルに1つ)内の各セルの背後にバックグラウンドを追加することでこれを克服することができました。

これが私の最後のコードです:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell 
forRowAtIndexPath:(NSIndexPath *)indexPath { 
    // Remove background gaps on the left and right sides of row separators on iOS < 10. 
    cell.backgroundColor = cell.contentView.backgroundColor; 

    // Remove another gap in row background when swiping in to the left to start editing. 
    CGRect cellFrame = [cell convertRect:cell.bounds toView:tableView]; 
    UIView *backgroundView = self.cellBackgroundViews[indexPath]; 
    if (backgroundView == nil) { 
     backgroundView = [[UIView alloc] init]; 
     self.cellBackgroundViews[indexPath] = backgroundView; 
    } 
    backgroundView.frame = CGRectInset(cellFrame, 0, -1); 
    backgroundView.backgroundColor = cell.contentView.backgroundColor; 
    [self.tableView addSubview:backgroundView]; 
    [self.tableView sendSubviewToBack:backgroundView]; 
} 

- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell 
forRowAtIndexPath:(NSIndexPath *)indexPath { 
    UIView *backgroundView = self.cellBackgroundViews[indexPath]; 
    [backgroundView removeFromSuperview]; 
} 
関連する問題