我上过牢房课
import UIKit
class LinkCellView: UITableViewCell {
@IBOutlet weak var cellTitleLabel: UILabel!
@IBOutlet weak var tagsListView: UIView!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
我在tagsListView
中填充cellForRowAt
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "linkCell", for: indexPath) as! LinkCellView
let object = links[indexPath.row]
cell.cellTitleLabel!.text = object.description
let tag = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 21))
tag.text = "Frkul"
cell.tagsListView.addSubview(tag)
return cell
}
不幸的是,当我随后在模拟器中运行该应用程序时,几乎看不到标签列表。我期望看到整个标签列表。
我对iOS开发还很陌生,因此可能缺少一些有关设计iOS UI的基本知识。如果无法直接回答此问题,请向我介绍一个教程/网络研讨会,以指导新手学习该主题。
应用程序的静态版本-https://gitlab.com/lipoqil/stackview-in-table-cell
答案 0 :(得分:1)
好吧,由于某种原因,如果我使用UIStackView
而不是UIView
,它的显示效果几乎与我希望的一样。
它在代码中进行了一项更改
cell.tagListView.addSubview(tag)
→cell.tagListView.addArrangedSubview(tag)
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "linkCell", for: indexPath) as! LinkCellView
cell.tagListView.subviews.forEach { $0.removeFromSuperview() }
let object = links[indexPath.row]
cell.cellTitleLabel!.text = object.description
let tag = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 21))
tag.shadowColor = .blue
tag.text = object.tags
cell.tagListView.addArrangedSubview(tag)
return cell
}
我仍然需要解决如何在此处放置标签,如何使其看起来更具标签感,但我认为这超出了最初的问题。
答案 1 :(得分:0)
如果您有一个标记集合,则需要在tableView Cell中实现一个集合视图,如果只有1个标记,只需在xib中实现它即可?
答案 2 :(得分:0)
这是我的代码。
func numberOfSections(in tagsCV: UICollectionView) -> Int {
return 1
}
func collectionView(_ tagsCV: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return videoObject?.tags?.count ?? 0
}
func collectionView(_ tagsCV: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize{
let fontAttributes = [NSAttributedStringKey.font: StylesBook.hashtag.value.textFont]
let size = (videoObject?.tags?[indexPath.row] ?? "" as String).size(withAttributes: fontAttributes)
return CGSize(width: size.width + CGFloat(20) , height: 50)
}
func collectionView(_ tagsCV: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = tagsCV.dequeueReusableCell(withReuseIdentifier: "TagCollectionViewCell", for: indexPath) as! TagCollectionViewCell
cell.tagBtn.setTitle(englishNumToPersian(text: videoObject?.tags?[indexPath.row] ?? "") , for: .normal)
cell.tagBtn.addTarget(self, action: #selector(tagTaped(sender:)), for: .touchDown)
cell.transform = CGAffineTransform(scaleX: -1, y: 1)
return cell
}
关键是您需要设置集合视图的滚动方向horizontal
。这样,无论您具有1个标签还是1000个标签,它们都将完美显示,并且按钮(或标签)的宽度将适合其内容。我建议您使用按钮而不是标签,并禁用其用户交互以使其像标签一样。