gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 01:36:48 26 4
gpt4 key购买 nike

我一直在构建这个聊天,但我被困在一些我还无法弄清楚的事情上。

我一直在尝试根据场景向左或向右对齐相同的 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。正如我之前提到的,这适用于除第一个单元格之外的所有单元格。

  1. 这部分有效,因为出于某种原因它不会影响第一行并且两个约束都保持激活状态,因此该行在 tableview 的宽度内拉伸(stretch),如下所示:。

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 中。

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

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com