【问题标题】:Positioning elements in UITableViewCell在 UITableViewCell 中定位元素
【发布时间】:2019-03-25 03:33:29
【问题描述】:

我有一个单元格的课程

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 的基本知识。如果无法直接回答这个问题,请指点我一个教程/网络研讨会,让新手了解这个主题。

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

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

【问题讨论】:

  • 共享单元格中每个项目的约束
  • 我更新了IB截图
  • 使用自动布局而不是 CGRect
  • @codeByThey 对不起,我需要例子。我不知道你写的是什么意思。
  • 我添加了应用静态演示的链接

标签: ios swift uitableview user-interface


【解决方案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
}

我仍然需要解决,如何在此处放置标签,如何使其看起来更具标签,但我相信这超出了最初的问题。

【讨论】:

    【解决方案2】:

    如果你有一个标签集合,你需要在你的 tableView 单元中实现一个集合视图,如果你只有 1 个标签,只需在你的 xib 中实现它?

    【讨论】:

    • 在我看来,集合视图是用于数据的网格可视化。由于标签的长度会有所不同,我不认为 UICollectionView 非常适合这项任务。或者是否有可能使它成为非网格?对于愚蠢的问题,对不起,iOS 开发中的几乎所有东西对我来说都是新的?
    • 是的,当然有可能! UI 集合视图是一种支持水平滚动的滚动视图,实际上,网格也是具有垂直滚动方向的集合视图,由于调整每个单元格的宽度,它看起来实际上是网格,例如你可以设置每个单元格的宽度 = screenWidth/3 或任何数字,我还使用动态标签的集合视图,或在我的应用程序中显示获胜者列表和.... :)
    【解决方案3】:

    这是我的代码。

    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
    }
    

    关键是你需要设置你的collection view的滚动方向horizontal。这样,无论您有 1 个还是 1000 个标签,它们都会完美显示,并且按钮(或标签)的宽度将适合其内容。我建议您使用按钮而不是标签,并禁用它的用户交互以充当标签。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 2019-12-19
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多