iOS Swift - 有没有办法将 subview 添加到表格单元格中并正确定位它?

标签 ios swift uitableview autolayout uilabel

所以,这是我的问题:

我想创建一个表来显示一些航类数据。这个想法是每个单元格代表一次旅行(即从城市 A 到 B 所需的所有航类)。每个航类都有 3 个属性,我会将它们划分为单独的标签,组成该行。因此,单元格必须相应地调整其高度。

这是我到目前为止所做的:

我的 View Controller 类:

@IBOutlet weak var dispTable: UITableView!
override func viewDidLoad() {
    super.viewDidLoad()

    dispTable.dataSource = self
    dispTable.delegate = self
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    if let cell = tableView.dequeueReusableCellWithIdentifier("DispCell") as? DispTableViewCell {
        let flight1: Flight = Flight()
        let flight2: Flight = Flight()
        curFlightsIda = [Flight]()
        Flight1.Num = "1221"
        Flight2.Num = "1331"

        curFlightsIda.append(Flight1)
        curFlightsIda.append(Flight2)

        for voo in curFlightsIda {
            let lbl = UILabel(frame: CGRectMake(0, 0, 100, 50))
            lbl.textAlignment = NSTextAlignment.Center
            lbl.text = voo.Num
            cell.contentView.addSubview(lbl)
        }

        return cell
    } else {
        return DispTableViewCell()
    }
}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 1
}

func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return 100
}

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

其中的 Flight.num 仅用于测试。我能够以编程方式创建标签,但我觉得按照我的方式,布局将无法正常工作。

那么,如何创建代表线条的标签并正确放置它们?我走在正确的轨道上吗?我四处搜寻并找到了 XIB,但我不确定它是否更好..?老实说,我完全迷失了,任何帮助将不胜感激。

我不确定这是否有帮助,但它会是这样的:

跳闸单元:

航类 1 编号 航类 1 出发航类 1 持续时间

Flight2Num Flight2Departure Flight2Duration

航类 3 编号 航类 3 出发航类 3 持续时间

最佳答案

不要。

原因:

cellForRowAtIndexPath 会为每个单元格调用(也在滚动期间)。如果你尝试做太多事情,它就不会平滑滚动。此外,单元会被重用(如出队所示)。 iOS 仅创建可见单元格实例的数量加上一两个额外的单元格。如果重复使用单元格,则需要在添加新标签之前删除已添加的标签,这会导致下一个问题:如何识别它们(搜索所有 subview 并检查它是否是 UILabel 的实例或使用标签并通过标签找到它们......无论如何:如果你尝试做太多,它就不会平滑滚动。

相反:

在模板单元格“DispCell”中定义标签,或在 Storyboard中创建不同的模板单元格(并按名称将正确的单元格出列)。在那里,您可以使用 Storyboard布局约束来正确定位标签。

如果您有灵活数量的 curFlightsIda,您可以考虑最大数量(并隐藏空标签),也可以使用文本字段而不是标签。

关于iOS Swift - 有没有办法将 subview 添加到表格单元格中并正确定位它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33700950/

相关文章:

ios - 当滚动外部 TableView 时,UITableViewCell 内的 UITableView 会隐藏

ios - 如何解决 Flutter Xcode 构建中的 "error:linker command failed with exit code 1"问题?

ios - 为什么线性梯度在模拟器中运行良好,但在真实设备上却运行不佳

ios - 没有1309是否可以在中央模式和外围模式下运行?

ios - 使用 ObjectMapper - 如何将 JSON 结果快速转换为 TableView

ios - 无法更新 Realm 对象

ios - ios如何发送多个参数?

swift - HealthKit 统计查询中的“尝试转换不兼容的单位”错误(swift)

ios - UITableViewCell 中的 UILabel 大小不正确(分配文本后的动画)

ios - 在不调用 tableview.reload 的情况下重新加载行