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
}

問題は、テーブルビューがロードされたときに間違って配置されているが、セルをスクロール/再描画した後、正しく配置されることです。さまざまな提案を試みましたが、誰も助けてくれませんでした。

スクロール前

スクロール前

スクロール後

スクロール後

ここでより具体的に言うと、プロジェクト全体です。

ソース

更新しました

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