iphone - uitableviewcell - uitableviewdatasource required




UITableViewHeaderFooterView:背景色を変更できません (11)

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でこのソリューションを見つけ、 Swift Recipesの詳細を確認します。

私はUITableViewHeaderFooterViewの背景色を変更しようとしています。 ビューは表示されますが、背景色は既定の色のままです。 xcodeからログを取得しています:

UITableViewHeaderFooterViewで背景色を設定することは推奨されていません。 代わりにcontentView.backgroundColorを使用してください。

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

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

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

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


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

- (void)setupBackgroundColor:(UIColor *) color {
    UIView *bgView = [[UIView alloc] initWithFrame:self.bounds];
    bgView.backgroundColor = color;
    self.backgroundView = bgView;
}

iOS 7 contentView.backgroundColortintColorは私のために働いていましたが、 tintColortintColorませんでした。

   headerView.contentView.backgroundColor = [UIColor blackColor];

clearColorは私のためには機能しませんでしたが、私が見つけた解決策はbackgroundViewプロパティを透明なイメージに設定することでした。 多分それは誰かを助けるでしょう:

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

headerView.backgroundView = [[UIImageView alloc] initWithImage:blank];

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


UITableViewHeaderFooterView contentViewのbackgroundColorを設定していることを確認してください:

self.contentView.backgroundColor = [UIColor whiteColor];

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


xibファイルでUITableViewHeaderFooterViewカスタムサブクラスを作成した場合は、 setBackgroundColorをオーバーライドする必要があります。 それを空にしておきなさい

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

}

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


迅速:

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView {
    var headerView: TableViewHeader = super.tableView(tableView, viewForHeaderInSection: section) as! TableViewHeader
    headerView.backgroundView.backgroundColor = UIColor.redColor()
}

堅実な背景色の場合、 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!
    }
}

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

ここでは、セクションヘッダーには透明な背景があります。

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

ここで、セクションヘッダーは完全に不透明なグラデーションの背景を持ちます:


私は外観と一緒に試してみましたが、チェーンに入って、それは私のために働いた。

[[UIView appearanceWhenContainedIn:[UITableViewHeaderFooterView class], [UITableView class], nil] 
         setBackgroundColor: [UIColor.grayColor]];

私は自分の経験を分かち合うように強く感じます。 私はこのコードをiOS 10とiOS 11のheaderView?.contentView.backgroundColor = .lightGray

それから、私は突然、いくつかのデバイスがあるため、iOS 9用のアプリケーションを展開することに決めました(iPad miniでは、9世代以降のOSには更新されません) - すべてのiOS 9,10,11他のすべてのヘッダーサブビューを含むヘッダーの基本ビューを定義し、それをストーリーボードからワイヤリングし、その基本ビューのbackgroundColorを設定することでした。

あなたがそれを呼び出さないようにコンセントを配線するときは注意が必要です: backgroundViewそのsuperclassその名前のプロパティが既に存在するためです。 私は私のビューと呼ばれるビュー

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


透明な色を使ってBackgroundViewを設定すると、表示されるヘッダーが正常に動作します。 表をスクロールして下部にヘッダーを表示すると、このソリューションは失敗します。

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







uitableview