151

UITableViewHeaderFooterViewの背景色を変更しようとしています。ビューは表示されていますが、背景色はデフォルトの色のままです。xcodeから次のようなログを取得しています:

UITableViewHeaderFooterViewでの背景色の設定は非推奨になりました。代わりにcontentView.backgroundColorを使用してください。

ただし、次のオプションはいずれも機能しません。

myTableViewHeaderFooterView.contentView.backgroundColor = [UIColor blackColor];
myTableViewHeaderFooterView.backgroundView.backgroundColor = [UIColor blackColor];
myTableViewHeaderFooterView.backgroundColor = [UIColor blackColor];

また、xibファイルのビューの背景色を変更してみました。

助言がありますか?ありがとう。

4

20 に答える 20

215

iOS 8、9、10、11 .. ..

任意の色(任意のアルファを使用)を設定する唯一の方法は、以下を使用することbackgroundViewです。

迅速

self.backgroundView = UIView(frame: self.bounds)
self.backgroundView.backgroundColor = UIColor(white: 0.5, alpha: 0.5)

Obj-C

self.backgroundView = ({
    UIView * view = [[UIView alloc] initWithFrame:self.bounds];
    view.backgroundColor = [UIColor colorWithWhite: 0.5 alpha:0.5];
    view;
    });

コメントへの回答

  • これらの他のオプションはどれも確実に機能しません(以下のコメントにもかかわらず)

    // self.contentView.backgroundColor = [UIColor clearColor];
    // self.backgroundColor = [UIColor clearColor];
    // self.tintColor = [UIColor clearColor];
    
  • backgroundView自動的にサイズ変更されます。(制約を追加する必要はありません)

  • UIColor(white: 0.5, alpha: 0.5)またはでアルファを制御しbackgroundView.alpha = 0.5ます。
    (もちろん、どんな色でもかまいません)

  • XIBを使用する場合は、ルートビューを作成し、プログラムUITableViewHeaderFooterViewで関連付けます。backgroundView

    登録:

    tableView.register(UINib(nibName: "View", bundle: nil),
                       forHeaderFooterViewReuseIdentifier: "header")
    

    ロード:

    override func tableView(_ tableView: UITableView,
                            viewForHeaderInSection section: Int) -> UIView? {
        if let header =
            tableView.dequeueReusableHeaderFooterView(withIdentifier: "header") {
            let backgroundView = UIView(frame: header.bounds)
            backgroundView.backgroundColor = UIColor(white: 0.5, alpha: 0.5)
            header.backgroundView = backgroundView
            return header
        }
        return nil
    }
    

デモ

↻リプレイアニメーション

►GitHubでこのソリューションを見つけ、SwiftRecipesで詳細を確認してください。

于 2014-08-31T04:00:54.847 に答える
119

を使用するかmyTableViewHeaderFooterView.tintColor、カスタム背景ビューをに割り当てる必要がありますmyTableViewHeaderFooterView.backgroundView

于 2013-03-24T22:43:39.140 に答える
26

iOS 7contentView.backgroundColorでは私のために働いたが、そうでtintColorはなかった。

   headerView.contentView.backgroundColor = [UIColor blackColor];

私にはうまくいきませclearColorんでしたが、私が見つけた解決策は、 backgroundViewプロパティを透明な画像に設定することです。多分それは誰かを助けるでしょう:

UIGraphicsBeginImageContextWithOptions(CGSizeMake(1, 1), NO, 0.0);
UIImage *blank = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

headerView.backgroundView = [[UIImageView alloc] initWithImage:blank];
于 2014-04-30T14:38:31.113 に答える
17

のbackgroundColorを設定しcontentViewてくださいUITableViewHeaderFooterView

self.contentView.backgroundColor = [UIColor whiteColor];

その後、それは動作します。

于 2014-12-15T10:05:36.893 に答える
15

私の場合、上記のすべてを試しましたが、「UITableViewHeaderFooterViewでの背景色の設定は非推奨になりました。代わりにcontentView.backgroundColorを使用してください」という警告が表示されていました。次に、これを試しました。xibファイル内で、ヘッダービューの背景色を選択して、デフォルトではなくクリアカラーを選択しました。デフォルトに変更すると、警告が消えました。 これでした

これに変更

于 2017-06-19T17:12:57.060 に答える
12

単色の背景色の場合、を設定するcontentView.backgroundColorだけで十分です。

func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    if let headerView = view as? UITableViewHeaderFooterView {
        headerView.contentView.backgroundColor = .red // Works!
    }
}

色を含む透明度のある.clear色の場合、これは機能しなくなります。

func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    if let headerView = view as? UITableViewHeaderFooterView {
        headerView.contentView.backgroundColor = .clear // Does not work 
    }
}

完全に透明なセクションヘッダーの場合は、backgroundViewプロパティを空のビューに設定します。

func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    if let headerView = view as? UITableViewHeaderFooterView {
        headerView.backgroundView = UIView() // Works!
    }
}

ただし、起こりうる副作用に注意してください。テーブルビューが「グループ化」に設定されていない限り、下にスクロールするとセクションヘッダーが上部にスナップします。セクションヘッダーが透明な場合、セルの内容が透けて見えますが、見栄えがよくない場合があります。

ここで、セクションヘッダーの背景は透明です。

ここに画像の説明を入力してください

これを防ぐには、セクションヘッダーの背景を、テーブルビューまたはビューコントローラーの背景と一致する単色(またはグラデーション)に設定することをお勧めします。

ここで、セクションヘッダーには完全に不透明なグラデーションの背景があります。

ここに画像の説明を入力してください

于 2018-02-06T18:55:08.383 に答える
9

クリアな色には、

self.contentView.backgroundColor = [UIColor clearColor];
self.backgroundView = [UIView new];
self.backgroundView.backgroundColor = [UIColor clearColor];

それは私には問題ないようです。

于 2015-01-12T06:06:17.003 に答える
8

ここに画像の説明を入力してくださいInterface Builderで、上部の要素にある.xibをプルアップし、属性インスペクターで背景色をデフォルトに設定します。次に、コンテンツビューに移動し、そこで背景色を設定します(https://github.com/jiecao-fm/SwiftTheme/issues/24を参照)。

于 2018-07-25T15:22:36.287 に答える
4

iOS9では headerView.backgroundView.backgroundColor私のために働いた:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
    TableViewHeader *headerView = (TableViewHeader *)[super tableView:tableView viewForHeaderInSection:section];
    headerView.backgroundView.backgroundColor = [UIColor redColor];
}

iOS8headerView.contentView.backgroundColorでは問題なく使用していましたが、iOS 9では、背景色がセルのスペース全体に表示されないという奇妙な問題が発生していました。だから私はちょうど試しましたheaderView.backgroundColor、そして私はOPから同じエラーを得ました。

UITableViewHeaderFooterViewでの背景色の設定は非推奨になりました。代わりにcontentView.backgroundColorを使用してください。

だから今、すべてがうまく機能し、警告なしで使用することによってheaderView.backgroundView.backgroundColor

于 2015-08-06T16:41:20.120 に答える
4

Storyboard / Nibを使用してセクションヘッダーセルをカスタマイズする場合は、「テーブルセクションヘッダー」ビューの背景色がデフォルトになっていることを確認してください。

また、をサブクラス化UITableViewHeaderFooterViewし、nibを使用する場合はIBOutlet、コンテンツビューのを作成し、名前を付ける必要があります。containerViewcontentViewこれは、このコンテナビューの親である、と混同しないでください。

その設定では、代わりにの背景色を変更しますcontainerView

于 2015-11-07T11:04:50.830 に答える
4

UITableViewHeaderFooterViewwith fileのカスタムサブクラスを作成した場合は、xibをオーバーライドする必要がありますsetBackgroundColor。空にしておいてください。

-(void)setBackgroundColor:(UIColor *)backgroundColor {

}

そして、これはあなたの問題を解決します。

于 2015-12-27T18:00:28.777 に答える
1

私はappearanceWhenContainedInチェーンで試してみましたが、うまくいきました。

[[UIView appearanceWhenContainedIn:[UITableViewHeaderFooterView class], [UITableView class], nil] 
         setBackgroundColor: [UIColor.grayColor]];
于 2014-08-14T23:13:20.957 に答える
1

おそらくbackgroundViewが存在しないためです

override func draw(_ rect: CGRect){
    // Drawing code
    let view = UIView()
    view.frame = rect
    self.backgroundView = view
    self.backgroundView?.backgroundColor = UIColor.yourColorHere
}

それは私のために働きます。

于 2017-12-17T09:25:25.577 に答える
1

iOS 12、Swift5。外観プロキシを使用する意思がある(または使用しようとしている)場合は、次の解決策が機能します。

  1. UITableViewHeaderFooterViewをサブクラス化し、独自の外観プロキシ設定を公開します。
final class MySectionHeaderView: UITableViewHeaderFooterView {
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override init(reuseIdentifier: String?) {
        super.init(reuseIdentifier: reuseIdentifier)
    }

    @objc dynamic var forceBackgroundColor: UIColor? {
        get { return self.contentView.backgroundColor }
        set(color) {
            self.contentView.backgroundColor = color
            // if your color is not opaque, adjust backgroundView as well
            self.backgroundView?.backgroundColor = .clear
        }
    }
}
  1. 外観プロキシを希望の粒度に設定します。
MySectionHeaderView.appearance().forceBackgroundColor = .red

また

MySectionHeaderView.appearance(whenContainedInInstancesOf: [MyOtherClass.self]).forceBackgroundColor = .red
于 2019-09-03T19:27:09.130 に答える
1

困難を忘れてください。

UITableViewHeaderFooterView+BGUpdate.swift以下のコードでプロジェクトに追加します。

extension UITableViewHeaderFooterView {

    open override var backgroundColor: UIColor? {
        get {
            return self.backgroundColor
        }
        set {
            let bgView = UIView()
            bgView.backgroundColor = newValue
            backgroundView = bgView
        }
    }
}

以前に予想したように、使用法は簡単です。

headerView.backgroundColor = .red

使用例

1)代理人のtableView:viewForHeaderInSection:

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let headerView = tv.dequeueReusableHeaderFooterView(withIdentifier: "MyHeaderView")
    headerView.backgroundColor = .red // <- here
    return headerView
}

また

2)カスタムヘッダービュークラスの場合:

class MyHeaderView: UITableViewHeaderFooterView {

    override func awakeFromNib() {
        super.awakeFromNib()
        backgroundColor = .red // <- here
    }
}
于 2020-01-24T11:44:15.920 に答える
1

UITableViewHeaderFooterViewサブクラスの初期化に次のコードを配置します。

let bgView = UIView()
bgView.backgroundColor = UIColor.clear
backgroundView = bgView
backgroundColor = UIColor.clear
contentView.backgroundColor = UIColor.clear
于 2020-03-25T06:06:54.093 に答える
0

クリアカラーでBackgroundViewを設定すると、表示されているヘッダーに対して正常に機能します。テーブルをスクロールして下部にヘッダーを表示すると、このソリューションは失敗します。

PSMyテーブルは、セルのないヘッダーのみで構成されています。

于 2015-09-22T06:41:59.960 に答える
0

迅速:

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView {
    var headerView: TableViewHeader = super.tableView(tableView, viewForHeaderInSection: section) as! TableViewHeader
    headerView.backgroundView.backgroundColor = UIColor.redColor()
}
于 2016-02-11T09:10:53.363 に答える
0

UIViewを作成し、背景色を設定してから、self.backgroundViewに設定します。

- (void)setupBackgroundColor:(UIColor *) color {
    UIView *bgView = [[UIView alloc] initWithFrame:self.bounds];
    bgView.backgroundColor = color;
    self.backgroundView = bgView;
}
于 2016-06-07T10:11:31.450 に答える
0

私は自分の経験を共有せざるを得ないと感じています。私はiOS10とiOS11でうまく機能するこのコードを持っていましたheaderView?.contentView.backgroundColor = .lightGray

それから私は突然、いくつかのデバイスがあるのでiOS 9用のアプリを展開することにしました(iPad miniの一部の古い世代は9以降のOSに更新されません)-すべてのiOS 9、10、および11で機能した唯一のソリューション他のすべてのヘッダーサブビューを含むヘッダーのベースビューを定義し、ストーリーボードから接続してbackgroundColor、そのベースビューのを設定することでした。

コンセントを配線するときは、それを呼び出さないように注意する必要がbackgroundViewあります。その名前のプロパティがすでにいくつかにあるためsuperclassです。私は私のと呼んだcontainingView

また、コンセントコントロールを配線するときは、ビューをクリックして、Document Outline配線されていないことを確認してください。file owner

于 2017-11-03T09:30:56.237 に答える