我们如何使用Swift在UITableView的节标题中添加图像?

13

在我的willDisplayHeaderView方法中,我改变了分组表头的颜色,但我想在分组标题前添加一张图片。求助? 我的willDisplayHeaderView代码是:

func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    let header: UITableViewHeaderFooterView = view as UITableViewHeaderFooterView 
    header.contentView.backgroundColor = UIColor(red: 238/255, green: 168/255, blue: 15/255, alpha: 0.8)
    header.textLabel.textColor = UIColor.whiteColor()
    header.alpha = 1
}
7个回答

11
您可以设计自己的标题,就像您会设计表格视图中的自定义单元格一样。 或者您可以像这样添加图像:
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

    var myCustomView: UIImageView
    var myImage: UIImage = UIImage(named: "myImageResource")
    myCustomView.image = myImage

    let header: UITableViewHeaderFooterView = view as UITableViewHeaderFooterView
    header.addSubview(myCustomView)
    return header
}

然后,您可以将章节标题的UILabel添加为另一个子视图。


5
这里只是简单地写成这样是不行的...让我们来看看能不能找到更好的解决方案。"let header: UITableViewHeaderFooterView = view as UITableViewHeaderFooterView" 需要翻译为:“在这里这样做并不起作用……”。 - Mikael
我已经通过编程方式添加了myCustomView,但在运行时没有显示任何图像?@Anfaje - Parth Barot
只需将myCustomView初始化为var myCustomView: UIImageView = UIimageView(),一个错误就会消失。 - shripad20

8
只需在您的viewDidLoad()方法中添加以下代码。
    var frame = CGRectMake(0, 0, self.view.frame.size.width, 200)
    var headerImageView = UIImageView(frame: frame)
    var image: UIImage = UIImage(named: "yourImage")!
    headerImageView.image = image
    youTableView.tableHeaderView = headerImageView

6

下面是如何在UITableView中添加自定义标题的方法。

func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
     let header: UITableViewHeaderFooterView = view as UITableViewHeaderFooterView
     let imageViewGame = UIImageView(frame: CGRectMake(5, 8, 40, 40));
     let image = UIImage(named: "Games.png");
     imageViewGame.image = image;
     header.contentView.addSubview(imageViewGame)
}

5
我在我的项目中使用以下方法。
override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? 
{
    let uilbl = UILabel()
    //uilbl.numberOfLines = 0
    //uilbl.lineBreakMode = NSLineBreakMode.ByWordWrapping
    //uilbl.text = "blablabla"
    uilbl.sizeToFit()
    uilbl.backgroundColor =  UIColor(patternImage: UIImage(named: "yr-img-name")!)

    return uilbl
}

4

这将适用于Swift 4

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let headerImage: UIImage = UIImage(named: "image")!
    let headerView = UIImageView(image: headerImage)
    return headerView
}

4

针对Swift 3

  override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    let header = view as! UITableViewHeaderFooterView
    header.textLabel?.textColor = UIColor.white
    let headerImage = UIImage(named: "headerBanner.jpg")
    let headerImageView = UIImageView(image: headerImage)
    header.backgroundView = headerImageView
}

3

Swift 5

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let imageView = UIImageView();
    let image = UIImage(named: "logo")
    imageView.contentMode = .center
    imageView.image = image;
    return imageView
}

  // Optionally you can set the header height here.
  override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 85
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接