我正在开发一个应用程序,我的tableviewcontroller有一些问题。首先,留给图片有可用空间。如何放大图像?或如何获得此空间以确保没有可用空间。该图像是一个cell.imageview,它从核心数据中获取其图像数据。 接下来的问题是。我的行有问题,您可以在图片上看到。如何解决?
答案 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
标签属性,可以防止标签被修剪。