草庐IT

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

coder 2023-09-15 原文

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

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

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

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

我想要的是:

其他消息--------

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

为此,在 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),如下所示:。

我尝试了几种方法,例如:

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

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

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

最佳答案

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

cell.setNeedsLayout() cell.layoutIfNeeded()

来自 cellForRowAtIndexPath

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

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

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

有关swift - 以编程方式更改 View 以左对齐或右对齐的更多相关文章

  1. ruby-on-rails - Ruby on Rails 迁移,将表更改为 MyISAM - 2

    如何正确创建Rails迁移,以便将表更改为MySQL中的MyISAM?目前是InnoDB。运行原始执行语句会更改表,但它不会更新db/schema.rb,因此当在测试环境中重新创建表时,它会返回到InnoDB并且我的全文搜索失败。我如何着手更改/添加迁移,以便将现有表修改为MyISAM并更新schema.rb,以便我的数据库和相应的测试数据库得到相应更新? 最佳答案 我没有找到执行此操作的好方法。您可以像有人建议的那样更改您的schema.rb,然后运行:rakedb:schema:load,但是,这将覆盖您的数据。我的做法是(假设

  2. ruby - 如何以所有可能的方式将字符串拆分为长度最多为 3 的连续子字符串? - 2

    我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123

  3. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  4. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  5. ruby-on-rails - 渲染另一个 Controller 的 View - 2

    我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>

  6. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  7. ruby - Capistrano 3 在任务中更改 ssh_options - 2

    我尝试使用不同的ssh_options在同一阶段运行capistranov.3任务。我的production.rb说:set:stage,:productionset:user,'deploy'set:ssh_options,{user:'deploy'}通过此配置,capistrano与用户deploy连接,这对于其余的任务是正确的。但是我需要将它连接到服务器中配置良好的an_other_user以完成一项特定任务。然后我的食谱说:...taskswithoriginaluser...task:my_task_with_an_other_userdoset:user,'an_othe

  8. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  9. ruby-on-rails - 如何在 Rails View 上显示错误消息? - 2

    我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c

  10. ruby-on-rails - 正确的 Rails 2.1 做事方式 - 2

    question的一些答案关于redirect_to让我想到了其他一些问题。基本上,我正在使用Rails2.1编写博客应用程序。我一直在尝试自己完成大部分工作(因为我对Rails有所了解),但在需要时会引用Internet上的教程和引用资料。我设法让一个简单的博客正常运行,然后我尝试添加评论。靠我自己,我设法让它进入了可以从script/console添加评论的阶段,但我无法让表单正常工作。我遵循的其中一个教程建议在帖子Controller中创建一个“评论”操作,以添加评论。我的问题是:这是“标准”方式吗?我的另一个问题的答案之一似乎暗示应该有一个CommentsController参

随机推荐