Swift 3中tableView的viewForHeaderInSection文本对齐异常问题
解决UITableView Section Header文本始终左对齐的问题
嘿,我瞅你这代码里明明设置了titleLabel.textAlignment = .center,但文本还是左对齐,问题出在你手动调整label的frame上啦!
咱们来拆解下问题:你调用sizeToFit()后,label的宽度只会刚好包裹住文本内容,这时候你把frame.origin.x硬设成15,相当于把整个label钉在了headerView左侧15pt的位置——虽然文本在label内部是居中的,但整个label本身在header里是左偏的,看起来就跟文本左对齐没差了。
给你两个靠谱的解决方案:
方案1:手动计算居中的x坐标
不用改太多代码,把你设置frame.origin.x = 15的地方改成基于headerView宽度计算的居中位置就行:
var frame = titleLabel.frame // 替换原来的frame.origin.x = 15,让label在header里水平居中 frame.origin.x = (headerView.bounds.width - frame.size.width) / 2 frame.origin.y = sectionHeight - frame.size.height - 7 // 保留你原来的垂直位置 titleLabel.frame = frame
方案2:用AutoLayout布局(更推荐适配多屏幕)
手动算frame容易在不同尺寸屏幕出问题,用AutoLayout更稳妥,代码调整如下:
let titleLabel = UILabel() titleLabel.font = UIFont(name: "HelveticaNeue", size: 15) titleLabel.textColor = UIColor.darkGray titleLabel.text = "Dummy test Dummy test" titleLabel.textAlignment = NSTextAlignment.center titleLabel.translatesAutoresizingMaskIntoConstraints = false // 必须关闭自动约束转换 headerView.addSubview(titleLabel) // 添加约束,让label水平居中,垂直保持你要的底部偏移7pt NSLayoutConstraint.activate([ titleLabel.centerXAnchor.constraint(equalTo: headerView.centerXAnchor), titleLabel.bottomAnchor.constraint(equalTo: headerView.bottomAnchor, constant: -7) ])
这样调整后,不管屏幕宽度多少,label都会在headerView里水平居中,文本自然也就显示在中间啦~
内容的提问来源于stack exchange,提问作者user7556668
相关产品推荐
相关产品推荐

