UITableViewCell中的定位元素

时间:2018-10-20 13:02:51

标签: ios swift uitableview user-interface

我上过牢房课

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
    }

}

Table View Cell in IB

我在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
}

不幸的是,当我随后在模拟器中运行该应用程序时,几乎看不到标签列表。我期望看到整个标签列表。

Resulting cell on iOS

我对iOS开发还很陌生,因此可能缺少一些有关设计iOS UI的基本知识。如果无法直接回答此问题,请向我介绍一个教程/网络研讨会,以指导新手学习该主题。

  • Xcode版本10.0
  • iOS 12
  • iOS模拟器10.0版

应用程序的静态版本-https://gitlab.com/lipoqil/stackview-in-table-cell

3 个答案:

答案 0 :(得分:1)

好吧,由于某种原因,如果我使用UIStackView而不是UIView,它的显示效果几乎与我希望的一样。

Table rows in simulator

它在代码中进行了一项更改

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个标签,它们都将完美显示,并且按钮(或标签)的宽度将适合其内容。我建议您使用按钮而不是标签,并禁用其用户交互以使其像标签一样。