【问题标题】:Update constraints of other elements when UITableView height changeUITableView 高度变化时更新其他元素的约束
【发布时间】:2016-04-17 23:47:28
【问题描述】:

我有一个UITableView,我在自动布局中将高度定义为 200。基于此,我将在其下方布置其他元素,例如UITextField 等。之后在运行时我从服务器获取数据并填充UITableView,因此我根据其内容更新UITableView 的高度尺寸。以下代码我正在使用它

self.myTableView.frame = CGRectMake(0 , 0, self.myTableView.frame.width, self.myTableView.contentSize.height)

但是由于这个原因,所有放置在UITableView 下面的元素仍然出现在它们在自动布局中布局时的相同位置。意味着UITableView 的高度变化对他们没有影响。下图描述了这个问题。有什么可能的解决方案?

在这里您可以看到,文本字段在运行时在 tableview 上重叠。我在 Xcode 7.2 中使用 Swift 2

【问题讨论】:

  • 当table view的size发生变化时,收到数据后是否更新约束?
  • 是的,我在接收和重新加载数据后更改了UITableView 的高度

标签: ios iphone swift uitableview


【解决方案1】:

如果您对表视图和其他视图具有所有必需的约束。

不要改变 TableView 的框架来改变它的高度。 而是创建您的 tablview 的高度约束的 IBOutlet。

例如说 IBOutlet 名称是 constraintTableViewHeight, 那么你就可以轻松上高了。

constraintTableViewHeight.constant = yourNewHeightValue
//update all constraint of your view and its inner view
self.view.layoutIfNeeded();

参考图片为您的身高约束创建 IBOutlet。

【讨论】:

  • 对不起,我的知识有限,但我怎样才能创建高度限制的 IBOutlet?
  • 您之前是否创建过按钮或标签的IBOutlet?
  • 欢迎您! @Abhi
【解决方案2】:

将NSLayoutConstraint 的 IBOutlet 用于 tableView 高度并设置其值未设置 tableview 框架如果您已经为 tableview 提供了约束,则它不起作用,因此更改 tableview 高度常量

如果您将 tblHeight 作为 tableView 高度然后设置 tblHeight.constant = self.myTableView.contentSize.height

【讨论】:

    【解决方案3】:

    你必须为你的表格视图高度约束创建一个出口连接:

    @IBOutlet var heightConstraint: NSLayoutConstraint!
    

    当你想改变表格视图的高度时,你可以像这样改变约束值:

    heightConstraint.constant = newHeightValue
    self.view.layoutIfNeeded()
    

    【讨论】:

      猜你喜欢
      • 2019-10-12
      • 2019-03-31
      • 2023-03-17
      • 1970-01-01
      • 2019-03-29
      • 1970-01-01
      • 1970-01-01
      • 2018-06-16
      • 2018-07-26
      相关资源
      最近更新 更多