【发布时间】:2017-08-15 00:51:29
【问题描述】:
我试图显示一个覆盖在另一个视图之上的表格视图以显示自动完成选项列表,但我无法正确调整表格视图的大小。
我在 xib 文件中定义了一个非常简单的 UITableView。我加载它,将其嵌入到现有的屏幕视图中,并在此视图控制器方法中以编程方式为前导、尾随、顶部和高度锚点设置布局约束(代码在 C# 中):
public void EmbedIn(UIView outerView)
{
outerView.AddSubview(View);
var constraints = new[]
{
View.LeadingAnchor.ConstraintEqualTo(outerView.LeadingAnchor, 8),
View.TrailingAnchor.ConstraintEqualTo(outerView.TrailingAnchor, 8),
View.TopAnchor.ConstraintEqualTo(outerView.TopAnchor, 15),
View.HeightAnchor.ConstraintEqualTo(outerView.HeightAnchor, 0.4f, 0),
};
NSLayoutConstraint.ActivateConstraints(constraints);
}
结果是表格视图太小了——它的尺寸与 xib 中的尺寸相同(奇怪的是,行分隔符继续从底部向下延伸到底部应该所在的位置)。
当我在 Xcode 中检查视图层次结构时,表视图的约束如下所示:
激活的四个约束是我没有添加的,无论是在运行时还是在 xib 中。其中的宽度和高度与 xib 中表格视图的大小相匹配。我的前导、尾随、顶部和高度约束都在那里,在其他禁用的约束中还有另一个匹配 xib 尺寸的集合,除了这次使用 midX 和 midY 而不是 minX 和 minY。
我尝试在viewDidLoad 中删除所有表格视图的约束(在添加我自己的之前),但我试图摆脱的那些似乎在那时并不存在。
那么这些限制来自哪里,我该如何摆脱它们?
【问题讨论】:
-
您能否附上 IDE 在运行时向您显示约束的屏幕截图,以及您用于以编程方式设置约束的代码?作为没有此信息的第一个猜测,也许尝试设置
tableView.translatesAutoresizingMaskIntoConstraints = false -
添加了代码 sn-p 和屏幕截图。文档说
translatesAutoresizingMaskIntoConstraints用于以编程方式创建的视图,并且从笔尖加载的视图默认设置为 false。但令人惊讶的是,它确实有效! -
甜,我会为它创建一个答案。很高兴我能帮上忙!
标签: ios autolayout