UITableViewCell在内容视图+文本换行标题中具有自定义控件

时间:2016-05-07 11:11:22

标签: ios swift uitableview swift2

我有自己的班级

TableViewCellRaing: UITableViewCell {
  @IBOutlet weak var outletCellRating: RaingControl!
}

显然,评级控制的灵感来自于: https://developer.apple.com/library/ios/referencelibrary/GettingStarted/DevelopiOSAppsSwift/Lesson5.html

我已将其控制权置于“内容视图”

然而,长标题涵盖了评级控制,这是不好的。

因此我试过了这个:

func tableView(tableView: UITableViewm cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
  //...
  cell = tableView.dequeueReusableCellWithIdentifier("rating", forIndexPath: indexPath);
  //...
  cell!.textLabel!.lineBreakmode = NSLineBreakMode.ByWordWrapping;
  cell!.textLabel!.numberOfLines = 0;
  //...
}

这确实会使标题中断并跨越多行,但它们会破坏太晚(即它看起来像是没有看到/考虑包含评级控制的“内容视图”)

这是我的故事板的截图

enter image description here

我不确定从这里开始的最佳方式是什么 - 我想知道在创建我的自定义单元类时是否做错了什么?或者,如果我可以创建一个不同的方式来解决这个问题?

细胞高度也存在问题,但如果我首先解决自定义控制问题,我可以自己计算。

2 个答案:

答案 0 :(得分:2)

为ratingControl提供高度,宽度,顶部和尾部约束。

您不能使用默认的textlabel,在ratingControl的左侧创建一个新标签。

给予容器边距的前导,顶部和底部(重要的是,不是超视图本身,而是视图边距,否则您可以使用动态高度单元格进行一些自动布局警告),尾随(到ratingControl,水平间距)和高度> = actualHeight与您的标签相对应。

然后将tableView estimatedRowHeight设置为原型单元格的平均高度(或者44.0是好的)和tableView.rowHeight = UITableViewAutomaticDimension。

cell!.textLabel!.numberOfLines = 0;是对的。

此时它应该有用......

答案 1 :(得分:0)

您的评分视图上方有3个标签,可能所有3个标签都必须为您提供问题。简单的方法是给出一个恒定的高度并转换大字符串,但你可能不需要它。因此,不要给标签赋予高度,而是正确地为您的标签和评级视图提供垂直约束。并使用

 self.tableView.estimatedRowHeight = 50
self.tableView.rowHeight = UITableViewAutomaticDimension 

和autolayout应该做的一切。