3

私のアプリには UITableView が含まれています。そのセルには、複数の行を表示するオプションがあります。セルには、カスタムの行アクション (画像) もあります。行アクション イメージを次のように設定します。

let date = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "", handler: { (action, indexPath) -> Void in})    
date.backgroundColor = UIColor(patternImage: UIImage(named: "rowActionPic")!)

画像の解像度は 122x94 です。セルに 1 行が表示されていれば、すべてが完全に収まっています。セルが 2 行以上表示されている場合、画像は 2 回表示されます。画像を中央に配置するオプションはありますか?

コードcellForRowAtIndexPath:

cell.textLabel?.numberOfLines = 0
let object = self.fetchedResultsController.objectAtIndexPath(indexPath) as! NSManagedObject
cell.textLabel?.text = object.valueForKey("name") as? String
4

1 に答える 1

4

当然、すべてのスペースを埋めるためにパターンが繰り返されます。

私がイメージングできる唯一の方法は、画像の高さを増やして、最も可能性の高い最大セルの高さを超えることです。


このコードと、アイコンが最初の 44x44 ピクセルを占める透明な背景と高さ 120 ピクセルの画像を使用しました

import UIKit

class ViewController: UITableViewController {
    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 30
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! UITableViewCell
        cell.textLabel?.text = "\(indexPath.row)"
        return cell
    }

    override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [AnyObject]? {

        let moreClosure = { (action: UITableViewRowAction!, indexPath: NSIndexPath!) -> Void in
            println("More closure called")
        }

        let moreAction = UITableViewRowAction(style: .Normal, title: "  ", handler: moreClosure)

        if let image = UIImage(named: "star.png"){
            moreAction.backgroundColor = UIColor(patternImage: image)

        }
        return [moreAction]
    }


    override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    }


    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
            return  min((44.0 * CGFloat(indexPath.row) + 1), 120.0)
    }
}

結果:

ここに画像の説明を入力

ここに画像の説明を入力

不透明な背景を持つ画像を使用すると、見栄えが良くなります。

ここに画像の説明を入力


サンプル プロジェクトについては、GitHubにアクセスしてください。

于 2015-08-25T21:53:19.690 に答える