2

经过几天的挣扎,我想问你关于 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 加载时它是错误对齐的,但在滚动/重绘单元格后它是正确对齐的。我尝试了不同的建议,但没有人帮助我。

滚动前

滚动前

滚动后

滚动后

更具体地说,这里是整个项目。

来源

更新

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
}
4

1 回答 1

1
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
}
于 2017-12-03T17:29:17.160 回答