1. ホーム
  2. ios

[解決済み] iOS7でUITableViewCellのセパレータが消える件

2022-07-20 09:06:53

質問

私は UITableView を使用すると、iOS 7 でのみ発生します。

UITableViewCellSeparator が最初の行の上と最後の行の下に表示されなくなります。行を選択したり、何らかのスクロール操作を行うと、表示されることがあります。

私の場合 tableView から読み込まれます。 StoryboardUITableViewStylePlain のようなスタイルになります。問題はきっと UITableViewCellSeparatorStyle であり、デフォルトの UITableViewCellSeparatorStyleSingleLine .

で読んだように Apple Dev Forums ( ここで はこちら ) 他の人々もこのような問題を抱えており、例えばいくつかの回避策が見つかっています。

Workaround: disable the default selection and recreate the behaviour in a method
trigged by a tapGestureRecognizer.

しかし、私はまだこのようなセパレータの奇妙な動作の理由を探しているところです。

何か思い当たることはありますか?

更新しました。 XCode 5.1 DPとiOS 7.1 betaで見たように、Appleはこの問題を修正しようとしたようです。現在、セパレータは、いくつかのリフレッシュの後、最後の行の下に必要に応じて表示されますが、テーブル ビューの作成後には表示されません。

どのように解決するのですか?

影響を受けるセルのサブビュー階層をダンプしてみると _UITableViewCellSeparatorView が非表示に設定されていました。どうりで表示されないわけだ!

私はオーバーロードした layoutSubviews を私の UITableViewCell のサブクラスを作成したところ、セパレータが確実に表示されるようになりました。

Objective-C :

- (void)layoutSubviews {
    [super layoutSubviews];

    for (UIView *subview in self.contentView.superview.subviews) {
        if ([NSStringFromClass(subview.class) hasSuffix:@"SeparatorView"]) {
            subview.hidden = NO;
        }
    }
}

スウィフト :

override func layoutSubviews() {
    super.layoutSubviews()

    guard let superview = contentView.superview else {
        return
    }
    for subview in superview.subviews {
        if String(subview.dynamicType).hasSuffix("SeparatorView") {
            subview.hidden = false
        }
    }
}

ここで提案された他の解決策は、私にとって一貫して機能しなかったか、または不格好に思えました(カスタム1pxフッタービューを追加する)。