如何使用自动布局调整 UITableView 的大小?
How do I resize my UITableView using Autolayout?
我在 Storyboard 的 ViewController 中有一个 UITableView(不是 UITableViewController)。我想要做的是在代码中的 TableView 上方添加一个自定义 UIView。当 View 不存在时,TableView 的顶部锚点将锚定到 PrimaryNavCollectionViewOutlet。我将这个约束存储为一个出口,然后如果我必须添加视图,我可以使用这个出口来删除故事板约束。
然后我将插入的视图限制在 TableView 所在的位置下方,并将 TableView 限制在该位置下方。
这是我的代码:
if (_viewAboveTableView != null)
{
TableView.RemoveConstraint(TableViewTopConstraint);
View.AddSubview(_viewAboveTableView);
_viewAboveTableView.TranslatesAutoresizingMaskIntoConstraints = false;
TableView.TranslatesAutoresizingMaskIntoConstraints = false;
_viewAboveTableView.LeadingAnchor.ConstraintEqualTo(View.LeadingAnchor).Active = true;
_viewAboveTableView.TopAnchor.ConstraintEqualTo(PrimaryNavCollectionViewOutlet.BottomAnchor).Active = true;
_viewAboveTableView.TrailingAnchor.ConstraintEqualTo(View.TrailingAnchor).Active = true;
_viewAboveTableView.BottomAnchor.ConstraintEqualTo(TableView.TopAnchor).Active = true;
}
不幸的是,当我 运行 它时,我看不到 _viewAboveTableView。我觉得我错过了一些简单的东西,但我不知道是什么。我已经在 View 上尝试过 LayoutIfNeeded() 和其他一些方法,但它们没有让它出现。我错过了什么?
- 为_viewAboveTableView 添加高度限制。
或者
- 确保 _viewAboveTableView 包含将指定固有内容大小的内容——它应该具有正确布局的子视图和内容大小(固有的或通过布局显式的。例如图像、标签等)
我的猜测是 _viewAboveTableView 没有膨胀,因为它没有指定内部内容大小(高度 > 0)。如果是错误的约束,你应该能够在控制台中看到它。
看来我所做的问题是 TableView.RemoveConstraint(TableViewTopConstraint);
没有达到预期的效果。
由此 answer 我了解到 RemoveConstraint 已经或即将被弃用,取而代之的是 TableViewTopConstraint.Active = false;
。这使我的代码按照预期的方式工作。
我在 Storyboard 的 ViewController 中有一个 UITableView(不是 UITableViewController)。我想要做的是在代码中的 TableView 上方添加一个自定义 UIView。当 View 不存在时,TableView 的顶部锚点将锚定到 PrimaryNavCollectionViewOutlet。我将这个约束存储为一个出口,然后如果我必须添加视图,我可以使用这个出口来删除故事板约束。
然后我将插入的视图限制在 TableView 所在的位置下方,并将 TableView 限制在该位置下方。
这是我的代码:
if (_viewAboveTableView != null)
{
TableView.RemoveConstraint(TableViewTopConstraint);
View.AddSubview(_viewAboveTableView);
_viewAboveTableView.TranslatesAutoresizingMaskIntoConstraints = false;
TableView.TranslatesAutoresizingMaskIntoConstraints = false;
_viewAboveTableView.LeadingAnchor.ConstraintEqualTo(View.LeadingAnchor).Active = true;
_viewAboveTableView.TopAnchor.ConstraintEqualTo(PrimaryNavCollectionViewOutlet.BottomAnchor).Active = true;
_viewAboveTableView.TrailingAnchor.ConstraintEqualTo(View.TrailingAnchor).Active = true;
_viewAboveTableView.BottomAnchor.ConstraintEqualTo(TableView.TopAnchor).Active = true;
}
不幸的是,当我 运行 它时,我看不到 _viewAboveTableView。我觉得我错过了一些简单的东西,但我不知道是什么。我已经在 View 上尝试过 LayoutIfNeeded() 和其他一些方法,但它们没有让它出现。我错过了什么?
- 为_viewAboveTableView 添加高度限制。 或者
- 确保 _viewAboveTableView 包含将指定固有内容大小的内容——它应该具有正确布局的子视图和内容大小(固有的或通过布局显式的。例如图像、标签等)
我的猜测是 _viewAboveTableView 没有膨胀,因为它没有指定内部内容大小(高度 > 0)。如果是错误的约束,你应该能够在控制台中看到它。
看来我所做的问题是 TableView.RemoveConstraint(TableViewTopConstraint);
没有达到预期的效果。
由此 answer 我了解到 RemoveConstraint 已经或即将被弃用,取而代之的是 TableViewTopConstraint.Active = false;
。这使我的代码按照预期的方式工作。