以编程方式向UITableView标头添加约束

时间:2017-02-20 19:33:56

标签: ios swift uitableview

我的tableview上有一个标题,它有一个图像和一个标签。我想让UIImage居中并将标签固定在它下面。这是我目前的代码:

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

    let headerLabel = UILabel()
    let logoView = UIImageView()

    headerLabel.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: 21)
    headerLabel.text = self.navigationItem.title
    headerLabel.textColor = UIColor.white
    headerLabel.backgroundColor = UIColor.clear
    headerLabel.textAlignment = NSTextAlignment.center

    logoView.frame = CGRect(x: 0, y: 0, width: 90, height: 90)
    let logo: UIImage = UIImage(named: self.navigationItem.title!)!
    logoView.image = logo
    logoView.contentMode = .scaleAspectFill

    view.addSubview(headerLabel)
    view.addSubview(logoView)

    return topView
}

这会将标签置于标题顶部,徽标位于左上角。如何添加约束(以编程方式,没有故事板)来居中图像并将其下方的标签粉红?我一直在使用程序化约束(即something.leftAnchor.constraint(equalTo....)但我不确定如何在这种情况下应用它,因为它是我第一次使用标题。

1 个答案:

答案 0 :(得分:3)

  

我想让UIImage居中并将标签固定在它下面。

这可以通过使每个子视图的成帧逻辑依赖于相邻视图来实现。在以编程方式执行此操作时,必须对所涉及的几何计算格外小心。

这段代码应该这样做:

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

    let logoView = UIImageView()

    logoView.frame = CGRect(x: tableView.center.x - 90/2, y: 0, width: 90, height: 90)
    let logo: UIImage = UIImage(named: self.navigationItem.title!)!
    logoView.image = logo
    logoView.contentMode = .scaleAspectFill

    view.addSubview(logoView)

    let headerLabel = UILabel()
    headerLabel.frame = CGRect(x: 0, y: logoView.frame.size.height, width: view.frame.width, height: 21)
    headerLabel.text = self.navigationItem.title
    headerLabel.textColor = UIColor.white
    headerLabel.backgroundColor = UIColor.clear
    headerLabel.textAlignment = NSTextAlignment.center

    view.addSubview(headerLabel)

    return topView
}