8

イメージビューであるUITableviewCellの背景ビューを使用しています。イメージビューを使用して、最初と最後のセルの2つのコーナーを実現しています。正常に動作していますが、問題は、この背景ビューを使用すると、tableviewcell のデフォルトの編集ボタンを押したときに表示されるデフォルトのセル削除ボタンが背景ビューで覆われていることです。背景ビューに明確な色を指定すると、機能しています結構ですが、背景ビューを設定したいです。

削除ボタンがセルの背景ビューによって覆われている、または隠されている理由はありますか? それはiOS 7で起こります助けてください!前もって感謝します。

4

6 に答える 6

4

背景ビューを使用する代わりにどうですか。画像を背景パターンの色として使用するだけで、これを使用してみてください

cell.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:YOUR_IMAGE]];
于 2013-10-09T09:57:31.630 に答える
3


まったく同じ問題がありました。遷移が開始されたときにbackgroundViewを送信し、次のrunloopサイクルでも再度送信することで解決しました(dispatch_asyncを使用)。

セル クラス .m ファイル (つまり、MyCustomTableCellView.m) に追加する必要があるコードは次のとおりです。

// Fix for iOS7, when backgroundView comes above "delete" button
- (void)willTransitionToState:(UITableViewCellStateMask)state {
    [super willTransitionToState:state];
    [self sendSubviewToBack:self.backgroundView];
    dispatch_async(dispatch_get_main_queue(), ^{
        [self sendSubviewToBack:self.backgroundView];
    });
}

- (void)didTransitionToState:(UITableViewCellStateMask)state {
    [super didTransitionToState:state];
    [self sendSubviewToBack:self.backgroundView];
}
于 2013-10-15T11:35:55.967 に答える
2

今日、SF で開催された iOS 7 Tech Talks イベントで Apple UIKit のエンジニアと話をしたところ、これが未解決のバグであり、Apple によって「間もなく」修正されることが確認されました。

2013 年10 月 22 日更新: iOS 7.0.3 でこの問題が修正されました。

于 2013-10-09T04:08:57.347 に答える
1

回避策

回避策については、Apple Developer Forums で回答を見つけました。backgroundViewselectedBackgroundViewの両方のケースを処理するために、その上に構築しました。

この問題は、製品版の iOS7.0.2 でもまだ見られます。ただし、この回避策は簡単で、問題を修正します(私にとって)。このコードをカスタム UITableViewCell サブクラスにドロップします。

この要点でも見つけることができます: https://gist.github.com/idStar/7018104

- (void)layoutSubviews {
    [super layoutSubviews];

    [self applyEditingModeBackgroundViewPositionCorrections];
}


/**
 When using a backgroundView or selectedBackgroundView on a custom UITableViewCell 
 subclass, iOS7 currently 
 has a bug where tapping the Delete access control reveals the Delete button, only to have 
 the background cover it up again! Radar 14940393 has been filed for this. Until solved, 
 use this method in your Table Cell's layoutSubviews
 to correct the behavior.

 This solution courtesy of cyphers72 on the Apple Developer Forum, who posted the
 working solution here: https://devforums.apple.com/message/873484#873484
 */
- (void)applyEditingModeBackgroundViewPositionCorrections {
    if (!self.editing) { return; } // BAIL. This fix is not needed.

    // Assertion: we are in editing mode.

    // Do we have a regular background view?
    if (self.backgroundView) {
        // YES: So adjust the frame for that:
        CGRect backgroundViewFrame = self.backgroundView.frame;
        backgroundViewFrame.origin.x = 0;
        self.backgroundView.frame = backgroundViewFrame;
    }

    // Do we have a selected background view?
    if (self.selectedBackgroundView) {
        // YES: So adjust the frame for that:
        CGRect selectedBackgroundViewFrame = self.selectedBackgroundView.frame;
        selectedBackgroundViewFrame.origin.x = 0;
        self.selectedBackgroundView.frame = selectedBackgroundViewFrame;
    }
}

ここで基本的に行っているのは、これらの背景ビューが編集モードの場合、テーブル セルのレイアウト時にこれらの背景ビューの x 原点をゼロにリセットすることです。それらが間違って翻訳されている理由と、Apple が提供する「削除」ボタン ビューの上にある理由は、おそらく、Apple が修正に取り組んでいる既知の問題の一部です。

于 2013-10-17T01:39:06.863 に答える
0

以下のコードを試してみてください。

[youttablecell sendSubviewToBack:yourimageview]
于 2013-10-01T05:33:14.190 に答える