[iphone] UITableViewHeaderFooterView : 배경색을 변경할 수 없습니다.
UITableViewHeaderFooterView의 배경색을 변경하려고합니다. 보기가 표시 되더라도 배경색은 기본 색상으로 유지됩니다. xcode에서 다음과 같은 로그를 받고 있습니다.
UITableViewHeaderFooterView의 배경색 설정은 더 이상 사용되지 않습니다. 대신 contentView.backgroundColor를 사용하세요.
그러나 다음 옵션은 작동하지 않습니다.
myTableViewHeaderFooterView.contentView.backgroundColor = [UIColor blackColor];
myTableViewHeaderFooterView.backgroundView.backgroundColor = [UIColor blackColor];
myTableViewHeaderFooterView.backgroundColor = [UIColor blackColor];
또한 xib 파일에서보기의 배경색을 변경해 보았습니다.
어떤 제안? 감사.
답변
myTableViewHeaderFooterView.tintColor를 사용하거나 myTableViewHeaderFooterView.backgroundView에 사용자 지정 배경보기를 할당해야합니다.
답변
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 에 대한 추가 세부 사항을 찾으십시오 .
답변
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];
답변
당신의 backgroundColor로 설정해야합니다 contentView
당신을 위해 UITableViewHeaderFooterView
:
self.contentView.backgroundColor = [UIColor whiteColor];
그러면 작동합니다.
답변
나를 위해 위에서 언급 한 모든 것을 시도했지만 여전히 “UITableViewHeaderFooterView의 배경색 설정이 더 이상 사용되지 않습니다. 대신 contentView.backgroundColor를 사용하십시오.”라는 경고가 표시되었습니다. 그런 다음 이것을 시도했습니다 : xib 파일 내에서 헤더보기의 배경색이 기본값 대신 색상을 지우도록 선택되었습니다. 일단 기본값으로 변경하면 경고가 사라졌습니다.
답변
선명한 색상을 위해
self.contentView.backgroundColor = [UIColor clearColor];
self.backgroundView = [UIView new];
self.backgroundView.backgroundColor = [UIColor clearColor];
나에게는 괜찮아 보인다.
답변
단색 배경색의 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!
}
}
그러나 가능한 부작용에주의하십시오. 테이블보기가 “그룹화”로 설정되어 있지 않으면 아래로 스크롤 할 때 섹션 머리글이 맨 위에 스냅됩니다. 섹션 헤더가 투명하면 셀 내용이 잘 보이지 않을 수 있습니다.
여기에서 섹션 헤더에는 투명한 배경이 있습니다.
이를 방지하려면 섹션 헤더의 배경을 테이블 뷰 또는 뷰 컨트롤러의 배경과 일치하는 단색 (또는 그라데이션)으로 설정하는 것이 좋습니다.
여기에서 섹션 헤더에는 완전히 불투명 한 그라데이션 배경이 있습니다.