在视图期间更改后重新排列自动布局

Posted

技术标签:

【中文标题】在视图期间更改后重新排列自动布局【英文标题】:Rearrange autoLayout after changes during view 【发布时间】:2016-06-06 22:25:34 【问题描述】:

我在 Storyboard 中有 2 个 TableViews (一个在顶部,另一个在底部),并且自动布局已设置并正常工作。对于 TableViews,我正在从数据库中检索数据,因此它不会立即显示 TableView 内容。检索数据完成后,在numberOfRowsInSection我根据计数改变TableView的高度。

 if tableView == self.TableView1 
    count = tableView1Content.count

    if count != nil 
      let cellSize = 100

      switch count! 
         case 0:
           tableView.frame.size.height = CGFloat(0)
           break;
         case 1:
           tableView.frame.size.height = CGFloat(cellSize)
         case 2:
           tableView.frame.size.height = CGFloat(cellSize * 2)
         default:
           print("D")
           break;
      
    

所以我可以改变 TableView1 的高度。 TableView2 的“到 TableView1 的顶部空间”为 10,但由于在视图加载后发生高度变化,TableView2 不会自行调整以保持“到 TableView1 的顶部空间”

【问题讨论】:

【参考方案1】:

您正在更改框架大小而不是高度约束常量。您应该连接高度约束(IBOutlet)并更改高度,更改后调用self.view.layoutIfNeeded()

这里是 example 的动画约束。

【讨论】:

我应该将哪个高度限制连接到 ViewController?我应该将 TableView2 的“顶部空间约束连接到 TableView1”并手动添加差异吗?我对你的约束位有点困惑。我想要的只是 TableView2 保持对 TableView1 的约束,即使 TableView1 的高度发生变化。我觉得你误会了我。 (让我澄清一下我的问题。我在顶部有 TV1,在底部有 TV2;TV2 与 TV1 的顶部间距为 10。我希望 TV2 在 TV1 的高度变化时保持其约束 没关系,只需连接tv1高度约束,并将其更改为所需值,然后tv2顶部约束将自动更改...只是不要忘记在更改高度值后调用layoutIfNeeded() .您在 tv1 上设置了高度限制?

以上是关于在视图期间更改后重新排列自动布局的主要内容,如果未能解决你的问题,请参考以下文章

使用自动布局删除视图并重新排列其余部分

在代码中更改框架后自动布局重置视图

设备方向更改时如何重新排列集合视图单元格

Xcode 自动布局和屏幕方向

使用自动布局动态更改子视图后调整超级视图的大小

使用自动布局隐藏视图并重新定位其他视图