我的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....
)但我不确定如何在这种情况下应用它,因为它是我第一次使用标题。
答案 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
}