swift - 以编程方式更改 View 以左对齐或右对齐

标签 swift interface-builder ios9 xcode7 nslayoutconstraint

我一直在建立这个聊天室,但我陷入了一些我还无法弄清楚的事情。

我一直在尝试根据场景向左或向右对齐相同的 View ,但没有成功,但我还没有得到所需的结果。

基本上,我在界面生成器中构建了单元格并将其固定在左侧,并根据内部标签的内容使其宽度和高度可变。

我一直在尝试做的是重复使用相同的单元格,并在我是发送消息的人(黄色)时向右对齐,因为默认情况下,当其他人向我发送消息时,它会向左对齐(灰色) )请参见下图进行说明:

enter image description here

我想要的是:

其他留言--------

--------------我的留言

为了实现这一目标,在 TroyT 的建议下,我根据需要激活和停用前导/尾随约束。

所以我所做的是。

  1. 在我的 UITableViewCell 类上,我为两个约束创建了两个 @IBoulet,如下所示:

    @IBOutlet var bubbleViewLeading: NSLayoutConstraint!

    @IBOutlet var bubbleViewTrailing: NSLayoutConstraint!

  2. 随后,在 tableViewController 的方法 cellForRowAtIndexPAth 中,我根据需要执行以下操作来激活或停用其中一个约束。

cell.bubbleViewTrailing.active = true cell.bubbleViewLeading.active = false

或者相反

cell.bubbleViewTrailing.active = false cell.bubbleViewLeading.active = true

其中设置为“True”的约束设置为 0。正如我之前提到的,这对于除第一个单元格之外的所有单元格都有效。

  • 这部分有效,因为由于某种原因它不会影响第一行,并且两个约束都保持激活状态,因此该行会拉伸(stretch)到表格 View 的宽度,如下所示:
  • enter image description here

    我尝试了以下几种方法:

    • 使用 UITableViewCell 类中的 init 方法更改约束
    • 更改 UITableViewCell 中 awakeFromNib 方法的约束
    • 使用 Storyboard左侧第三个选项卡上的“用户定义的运行时属性”,添加名为“active”的关键路径,将类型设置为 Bool,并将值设置为 false。
    • 当我在 Storyboard中选择约束时,在属性检查器中取消选中“已安装”

    但是,这些方法都不会影响第一个单元格的约束,但我可以轻松更改其他所有内容,例如单元格背景或单元格内标签中的文本对齐方式。这只是我第一次使用单元时不会改变的约束。即使当我向下滚动越过屏幕边界以“强制”单元格重用时,第一个单元格也会被固定:

    enter image description here

    我几天来一直试图解决这个问题,但收效甚微。因此,我决定对这个问题悬赏。

    最佳答案

    你解释的对我来说没有什么意义,但如果它只发生在第一行,那么我会尝试通过执行以下操作来强制布局重绘:

    cell.setNeedsLayout() cell.layoutIfNeeded()

    来自cellForRowAtIndexPath

    顺便说一句,我认为更好的方法是注册 2 个不同的单元格,并在 IB 中创建它们。这种方法将使您的代码更短,并且允许您不仅修改尾随/前导,还可以修改颜色、字体或任何您需要的内容。您为它们提供 2 个不同的 ID,但保留相同的实现类,然后只需将 cellForRowAtIndexPath 上所需的 ID 出队即可。

    为每种样式保留不同的单元格是使用 IB 执行这些操作的标准方法。

    关于swift - 以编程方式更改 View 以左对齐或右对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36297113/

    相关文章:

    swift - swift 中的匿名类

    ios - 在 Swift 3 中动态调整 UITableViewCell 的高度失败

    ios - 关闭 ViewController 不会到达所需的 Controller

    ios9 - 资源无法加载是ios9

    ios - UIPanGestureRecognizer左右tableviewcell

    ios - 您可以在共享的全局类中跟踪用户的位置吗?

    objective-c - awakeFromNib 之后 NSWindow 为零

    ios - 自定义 UIView 作为 navigationItem 标题

    ssl - CFNetwork SSLHandshake 间歇性失败 (-9806)

    swift - ios9 swift 中的 NSUserDefault 关键编码?