【问题标题】:Controlling Constraint of Cell Item from TableViewController从 TableViewController 控制单元格项的约束
【发布时间】:2016-05-27 03:06:18
【问题描述】:

我有一个 TableViewController,其中包含 3 个标签和一个 imageView 的动态单元格。我在故事板中创建了它。看起来是这样的……

      - Label1
 oImg - Label2
      - Label3

而且,Label2 垂直居中于 imageView(称为约束-A);并且其他标签也与 Label2 对齐。

我要做的是,在 TableViewController 的cellForRowAtIndexPath 中,检查 Label3 是否为空,将 Label2 向下移动,Label1 保持之前设置的约束(因此也向下移动)。

作为第一个选项,我尝试将约束-A 连接到 TableViewController,但由于它是 TableViewCell,我无法将约束出口连接到 TableViewController。

然后,我尝试手动将它们向下移动,但奇怪的是它只影响一行(第一行没有 Label3),而 cellForRowAtIndexPath 的其余部分工作正常..

cell.Label2.frame.origin.y += 5
cell.Label1.frame.origin.y += 5

实现这一目标的适当方法是什么? (所以我可以控制约束-A 或手动移动 Label2,Label1 跟随)

【问题讨论】:

  • 这取决于你的约束。您可以将 Constraint Outlet 设置为 YourCusstomCell Class 。在 cellForRow 中,您可以检查 Label3 的数据源是否为空,您可以更改此方法的约束。我想您需要制作所有标签和图像出口来进行约束。
  • 这取决于您的要求,您的行高是否固定,您的标签是1行还是多行。
  • 设置 Label3 第 0 行的编号并移除垂直居中到 imageView ,当文本为空时,您的 label2 会自动向下

标签: ios swift uitableview autolayout nslayoutconstraint


【解决方案1】:

 //set above image 2
  cell.constLbl.constant = -(cell.lbl3.frame.size.height / 2 - 10); // this obj below img 1
cell.constLbl3Top.constant = cell.lbl3.frame.size.height / 2; // this obj below img 2

【讨论】:

  • 非常感谢您的详细回答。 ranjit 的回答是一种更快的方法,但您的解释 +1
【解决方案2】:

为 label1 和 label2 的 y-cord 约束创建 IBOutlet 属性,然后更改“您的属性名称”.constraint = “some value”,而不是更改框架 y-cord。

【讨论】:

  • 那么为 Label1 和 Label2 再创建 2 个标签并相应地隐藏/显示它们?我无法创建从 TableViewCell 中的 UILabel 到 TableViewController 的插座
  • 不要创建新标签,只创建它们的 y-cord 约束属性。
  • 创建一个自定义类,比如继承自 UItableViewCell 的 CustomCell 并连接到 UItableViewController 中的 TableViewCell。现在您可以在 CustomCell 中创建一个属性,并在 UITableViewController 的 cellforrowatIndexpath 函数中使用。
猜你喜欢
  • 2016-04-04
  • 1970-01-01
  • 2017-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-22
相关资源
最近更新 更多