Swift:UIButton edgeinsets 在单元格 redrawn/scroll 之后应用
Swift: UIButton edgeinsets applies after cell redrawn/scroll
经过几天的挣扎,我想问你有关 UIButton 标题和图像边缘插入的问题...
我有带按钮的自定义单元格,该按钮取决于单元格类型应该是不同的图标和文本,但要求文本应该居中,图像可以左对齐或右对齐。为此,我在更新按钮图块和图像期间设置了边缘插入。为简单起见,我将图像插入左侧硬编码为 8,并计算标题的左点,文本应从该点开始。
func setTitleWithImage(_ title: String, imageName: String) {
self.btnStatus.setTitle(title, for: .normal)
self.btnStatus.setImage(UIImage(named: imageName), for: .normal)
self.btnStatus.imageEdgeInsets.left = 8
let btnWidth = btnStatus.frame.width
let titleLabelWidth = btnStatus.titleLabel?.frame.width
self.btnStatus.titleEdgeInsets.left = (btnWidth / 2) - (titleLabelWidth! / 2) - (btnStatus.imageView?.frame.width)! + self.btnStatus.imageEdgeInsets.left
}
问题是当加载 tableview 时它对齐错误,但在 scrolling/redraw 单元格后它对齐正确。我尝试了不同的建议,但没有人帮助我。
滚动前
滚动后
在这里更具体地说是整个项目。
已更新
ViewController 差不多全部 更详细请下载源码
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 140
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCell(withIdentifier: "customCell", for: indexPath) as! CustomTableViewCell
cell.setTitleWithImage("DIFFERENT TEXT IS HERE ?", imageName: "icon")
cell.layoutIfNeeded()
cell.setNeedsLayout()
return cell
}
func alignTitleWithImageFrames () {
let btnWidth = btnStatus.frame.width
let titleLabelWidth = btnStatus.titleLabel?.frame.width
self.btnStatus.titleEdgeInsets.left = (btnWidth / 2) - (titleLabelWidth! / 2) - (btnStatus.imageView?.frame.width)! + 13
self.btnStatus.imageEdgeInsets.left = 8
}
经过几天的挣扎,我想问你有关 UIButton 标题和图像边缘插入的问题... 我有带按钮的自定义单元格,该按钮取决于单元格类型应该是不同的图标和文本,但要求文本应该居中,图像可以左对齐或右对齐。为此,我在更新按钮图块和图像期间设置了边缘插入。为简单起见,我将图像插入左侧硬编码为 8,并计算标题的左点,文本应从该点开始。
func setTitleWithImage(_ title: String, imageName: String) {
self.btnStatus.setTitle(title, for: .normal)
self.btnStatus.setImage(UIImage(named: imageName), for: .normal)
self.btnStatus.imageEdgeInsets.left = 8
let btnWidth = btnStatus.frame.width
let titleLabelWidth = btnStatus.titleLabel?.frame.width
self.btnStatus.titleEdgeInsets.left = (btnWidth / 2) - (titleLabelWidth! / 2) - (btnStatus.imageView?.frame.width)! + self.btnStatus.imageEdgeInsets.left
}
问题是当加载 tableview 时它对齐错误,但在 scrolling/redraw 单元格后它对齐正确。我尝试了不同的建议,但没有人帮助我。
滚动前
滚动后
在这里更具体地说是整个项目。
已更新
ViewController 差不多全部 更详细请下载源码
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 140
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCell(withIdentifier: "customCell", for: indexPath) as! CustomTableViewCell
cell.setTitleWithImage("DIFFERENT TEXT IS HERE ?", imageName: "icon")
cell.layoutIfNeeded()
cell.setNeedsLayout()
return cell
}
func alignTitleWithImageFrames () {
let btnWidth = btnStatus.frame.width
let titleLabelWidth = btnStatus.titleLabel?.frame.width
self.btnStatus.titleEdgeInsets.left = (btnWidth / 2) - (titleLabelWidth! / 2) - (btnStatus.imageView?.frame.width)! + 13
self.btnStatus.imageEdgeInsets.left = 8
}