TableviewController /行/图像问题

时间:2018-09-21 18:47:05

标签: ios swift

我正在开发一个应用程序,我的tableviewcontroller有一些问题。首先,留给图片有可用空间。如何放大图像?或如何获得此空间以确保没有可用空间。该图像是一个cell.imageview,它从核心数据中获取其图像数据。 接下来的问题是。我的行有问题,您可以在图片上看到。如何解决?

enter image description here

2 个答案:

答案 0 :(得分:0)

您似乎使用了默认的UITableViewCell类,但是您需要为其创建一个子类并使每个内容都自定义

要还原标签修剪,您需要将UILabel项的.numberOfLines属性设置为0以便可以包装,对于约束的检查可能像这样

  

ImageView:宽度,高度(静态/比例),顶部,前导

     

label:指向imageView,从顶部到底部并从底部到单元格

Using Auto Layout in UITableView for dynamic cell layouts & variable row heights可以帮助您创建动态表格单元格

答案 1 :(得分:0)

首先,对您来说,实现UITableViewCell的子类并在其中指定任何与单元格相关的逻辑将更具建设性。一种直观的方法-基于表格视图屏幕截图的内容-看起来像这样

class ShowTableViewCell: UITableViewCell {

    // MARK: - Outlets

    @IBOutlet weak var imgThumbnail: UIImageView!
    @IBOutlet weak var lblTitle: UILabel!



    // MARK: - Functions

    func setUp(withShow show: Show) {
        self.imgThumbnail.image = show.thumbnailImage
        self.lblTitle.text = show.title
    }

}

请注意,上面声明的setUp(withShow:)函数正在使用类型为Show的用户定义对象

class Show {

    // MARK: - Properties

    var title: String?
    var thumbnailImage: UIImage?



    // MARK: - Initializers

    public init(withTitle title: String, andImage image: UIImage) {
        self.title = title
        self.thumbnailImage = image
    }

}

我认为,后一种方法更符合面向对象编程(OOP)标准。万一您需要向Show对象添加/删除任何属性,那么可以更加轻松和干净地反映单元格中的这些更改。您所需要做的就是从单元格中添加/删除相应的@IBOutlet对象,并按照setUp(withShow:)类函数中的说明进行配置。

继续,您将实现以下符合UITableViewDataSource协议的视图控制器,并相应地填充表

class ViewController: UIViewController {

    // MARK: - Properties

    var shows = [
        Show(withTitle: "UFC 127: Penn vs. Fitch", andImage: RESPECTIVE_IMAGE),
        Show(withTitle: "Strangers in Good Company", andImage: RESPECTIVE_IMAGE),
        Show(withTitle: "Candles on Bay Street", andImage: RESPECTIVE_IMAGE),
        Show(withTitle: "Flight Angels", andImage: RESPECTIVE_IMAGE)
    ]



    // MARK: - View Life Cycle

    override func viewDidLoad() {
        super.viewDidLoad()
    }

}



// MARK: - UITableViewDataSource Extension

extension ViewController: UITableViewDataSource {

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return shows.count
    }



    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cellIdentifier = "showCell"
        let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! ShowTableViewCell

        cell.setUp(withShow: shows[indexPath.row])

        return cell

    }

}

请注意,在声明shows数组时,应将我添加的RESPECTIVE_IMAGE占位符替换为所需的任何图像。您还应该使用所需的任何静态元素(或更动态地从数据库中查询它们)来填充它。

此外,使用自动布局,您可以手动确定图像的大小,并使用Number of Lines标签属性,可以防止标签被修剪。