UITableViewHeaderFooterViewの背景色を変更しようとしています。ビューは表示されますが、背景色はデフォルトの色のままです。私はxcodeからログを取得しています:
UITableViewHeaderFooterViewの背景色の設定は廃止されました。代わりにcontentView.backgroundColorを使用してください。
ただし、次のオプションはいずれも機能しません。
myTableViewHeaderFooterView.contentView.backgroundColor = [UIColor blackColor];
myTableViewHeaderFooterView.backgroundView.backgroundColor = [UIColor blackColor];
myTableViewHeaderFooterView.backgroundColor = [UIColor blackColor];
また、xibファイルのビューの背景色を変更しようとしました。
助言がありますか?ありがとう。
MyTableViewHeaderFooterView.tintColorを使用するか、myTableViewHeaderFooterView.backgroundViewにカスタム背景ビューを割り当てる必要があります。
任意の色(アルファ付き)を設定する唯一の方法は、backgroundView
を使用することです。
Swift
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")
Load with:
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 で追加の詳細を見つけてください。
IOS 7ではcontentView.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];
contentView
のUITableViewHeaderFooterView
のbackgroundColorを必ず設定してください。
self.contentView.backgroundColor = [UIColor whiteColor];
その後、動作します。
明確な色のために、私は
self.contentView.backgroundColor = [UIColor clearColor];
self.backgroundView = [UIView new];
self.backgroundView.backgroundColor = [UIColor clearColor];
それは私にはいいようです。
インターフェイスビルダーで、.xibの最上部の要素で、属性インスペクターで背景色をデフォルトに設定します。次に、コンテンツビューに移動して、背景色を設定します( https://github.com/jiecao-fm/SwiftTheme/issues/24 を参照)。
UITableViewHeaderFooterView
ファイルでxib
のカスタムサブクラスを作成した場合は、setBackgroundColor
をオーバーライドする必要があります。空のままにします。
-(void)setBackgroundColor:(UIColor *)backgroundColor {
}
そして、これはあなたの問題を解決します。
オンiOS9headerView.backgroundView.backgroundColor
は私のために働いた:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
TableViewHeader *headerView = (TableViewHeader *)[super tableView:tableView viewForHeaderInSection:section];
headerView.backgroundView.backgroundColor = [UIColor redColor];
}
iOS8私はheaderView.contentView.backgroundColor
を問題なく使用していましたが、iOS 9では、セルのスペース全体を背景色が満たさないという奇妙な問題が発生していました。だから私はheaderView.backgroundColor
だけを試してみましたが、OPから同じエラーが出ました。
UITableViewHeaderFooterViewの背景色の設定は廃止されました。代わりにcontentView.backgroundColorを使用してください。
したがって、headerView.backgroundView.backgroundColor
を使用することにより、すべてが警告なく警告なく動作します。
Storyboard/Nibでセクションヘッダーセルをカスタマイズする の場合、「テーブルの背景色がdefaultであることを確認してください。セクションヘッダー」ビュー。
そして、UITableViewHeaderFooterView
をサブクラス化し、nibを使用する場合、コンテンツビュー用にIBOutlet
を作成し、たとえば名前を付ける必要があります。 containerView
。これは、このコンテナビューの親であるcontentView
と混同しないでください。
そのセットアップでは、代わりにcontainerView
の背景色を変更します。
単色の背景色の場合、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!
}
}
ただし、考えられる副作用に注意してください。テーブルビューが「グループ化」に設定されていない限り、セクションヘッダーは下にスクロールすると上部にスナップします。セクションヘッダーが透明な場合、セルの内容が透けて見えますが、見栄えがよくない場合があります。
ここでは、セクションヘッダーの背景が透明になっています。
これを防ぐには、セクションヘッダーの背景を、Table ViewまたはView Controllerの背景と一致する単色(またはグラデーション)に設定することをお勧めします。
ここで、セクションヘッダーには完全に不透明なグラデーションの背景があります。
アピアランスWhenContainedInチェーンで試してみたところ、うまくいきました。
[[UIView appearanceWhenContainedIn:[UITableViewHeaderFooterView class], [UITableView class], nil]
setBackgroundColor: [UIColor.grayColor]];
たぶんbackgroundViewが存在しないため
override func draw(_ rect: CGRect){
// Drawing code
let view = UIView()
view.frame = rect
self.backgroundView = view
self.backgroundView?.backgroundColor = UIColor.yourColorHere
}
それは私のために働く。
スイフト:
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView {
var headerView: TableViewHeader = super.tableView(tableView, viewForHeaderInSection: section) as! TableViewHeader
headerView.backgroundView.backgroundColor = UIColor.redColor()
}
私は自分の経験を共有せざるを得ないと感じています。 iOS 10およびiOS 11で正常に動作するこのコードがありましたheaderView?.contentView.backgroundColor = .lightGray
その後、いくつかのデバイスがあるため、iOS 9用のアプリを展開することに突然決めました(iPad miniの一部の古い世代は9以降のOSには更新されません)-すべてのiOS 9、10、11で機能した唯一のソリューション他のすべてのヘッダーサブビューを含むヘッダーのベースビューを定義し、ストーリーボードから接続して、そのベースビューのbackgroundColor
を設定します。
アウトレットを呼び出さないようにアウトレットを配線するときは注意してください:backgroundView
には、その名前のプロパティが既にsuperclass
にあるためです。私はcontainingView
と呼んだ
また、アウトレットコントロールを配線するときは、Document Outline
のビューをクリックして、file owner
に配線されていないことを確認します。
UIViewを作成して背景色を設定し、self.backgroundViewに設定します。
- (void)setupBackgroundColor:(UIColor *) color {
UIView *bgView = [[UIView alloc] initWithFrame:self.bounds];
bgView.backgroundColor = color;
self.backgroundView = bgView;
}
BackgroundViewをクリアカラーで設定すると、表示されるヘッダーで正常に機能します。テーブルをスクロールして下部にヘッダーを表示すると、このソリューションは失敗します。
P.S. Myテーブルは、セルのないヘッダーのみで構成されています。