IB中的自动布局与代码中的自动布局

时间:2015-04-02 06:44:19

标签: ios objective-c uitableview swift autolayout

我有一个相当复杂的设置,方法如下:

  • 视图控制器和视图在IB中设置。在IB中我拖了一个UITableView,连接了必要的东西,并添加了4个约束来固定顶部,底部,左侧,右侧
  • 表格视图包含使用相当复杂的自动布局的单元格。我有一个自定义UITableViewCell来设置约束。

一切正常。

然后我尝试用在代码中声明的视图替换IB中设置的视图,从IB中删除表视图,告诉IB使用我的自定义视图。在我的自定义视图中,我创建了一个UITableView(将自动屏蔽事物设置为false),并添加了4个约束,将顶部,底部,左侧和右侧固定到父视图。

然而,当我这样做时,我的所有单元格都有自动布局错误“无法同时满足约束”。

我不明白的是 - 为什么给同一个单元格使用相同的自动布局代码:

  • 当在IB中创建UITableView并在IB中设置UITableView的约束时,它可以正常工作
  • 在代码中创建UITableView并在代码中设置UITableView约束时,会出现约束错误。

这是我对UITableView

的约束
override func updateConstraints()
{
    super.updateConstraints()

    if (self.didUpdateConstraints)
    {
        return
    }

    self.tableView.autoPinEdgeToSuperviewEdge(
        ALEdge.Leading,
        withInset:kLabelHorizontalInsets)

    self.tableView.autoPinEdgeToSuperviewEdge(
        ALEdge.Trailing,
        withInset:kLabelHorizontalInsets)

    self.tableView.autoPinEdgeToSuperviewEdge(
        ALEdge.Top,
        withInset:kLabelHorizontalInsets)

    self.tableView.autoPinEdgeToSuperviewEdge(
        ALEdge.Bottom,
        withInset:kLabelHorizontalInsets)

    self.didUpdateConstraints = true
}

autoPinEdgeToSuperviewEdge是一个辅助函数,最终构造一个NSLayoutConstraint并将其添加到“超级视图”。

我有什么遗失的吗?

0 个答案:

没有答案