UITableViewHeaderFooterView: Unable to change background color

前端 未结 20 2093
误落风尘
误落风尘 2020-12-23 08:38

I\'m trying to change the background color of UITableViewHeaderFooterView. Although the view is appearing, the background color remains the default color. I\'m getting a log

20条回答
  •  囚心锁ツ
    2020-12-23 09:15

    iOS 8, 9, 10, 11...

    The only way to set any color (with any alpha) is to use 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;
        });
    

    Responses to Comments

    • None of these other options reliably work (despite the comments below)

      // self.contentView.backgroundColor = [UIColor clearColor];
      // self.backgroundColor = [UIColor clearColor];
      // self.tintColor = [UIColor clearColor];
      
    • the backgroundView is resized automatically. (No need to add constraints)

    • Control alpha with UIColor(white: 0.5, alpha: 0.5) or backgroundView.alpha = 0.5.
      (of course, any color will do)

    • When using XIB, make root view a UITableViewHeaderFooterView and associate the backgroundView programmatically:

      Register with:

      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
      }
      

    ↻ replay animation

    ► Find this solution on GitHub and additional details on Swift Recipes.

提交回复
热议问题