[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!
    }
}

그러나 가능한 부작용에주의하십시오. 테이블보기가 “그룹화”로 설정되어 있지 않으면 아래로 스크롤 할 때 섹션 머리글이 맨 위에 스냅됩니다. 섹션 헤더가 투명하면 셀 내용이 잘 보이지 않을 수 있습니다.

여기에서 섹션 헤더에는 투명한 배경이 있습니다.

여기에 이미지 설명 입력

이를 방지하려면 섹션 헤더의 배경을 테이블 뷰 또는 뷰 컨트롤러의 배경과 일치하는 단색 (또는 그라데이션)으로 설정하는 것이 좋습니다.

여기에서 섹션 헤더에는 완전히 불투명 한 그라데이션 배경이 있습니다.

여기에 이미지 설명 입력