我有一个UIViewController,它有一些基本控件,中间有一个UIView(作为可交换ui控件的容器)。我在这个中心UIView(容器)中交换UI控件,具体取决于用户尝试做什么。进入UIView容器的所有UI控件都是以编程方式定义的,我使用编程约束将它们放在UIView容器中。
这对我到目前为止所做的所有UI控件集都很好。现在我将一组控件添加到包含UITableView
的UIView容器中我无法弄清楚如何以编程方式将TableView显示在UIView中。我可以定义一个按钮和标签然后运行应用程序,并使用按钮和标签查看容器。如果我按如下所示添加UITableView,那么容器根本就不显示。
// tableView
tableView.leftAnchor.constraint(equalTo: inputsContainerView.leftAnchor).isActive = true
tableView.bottomAnchor.constraint(equalTo: inputsContainerView.bottomAnchor).isActive = true
tableView.widthAnchor.constraint(equalTo: inputsContainerView.widthAnchor).isActive = true
tableView.heightAnchor.constraint(equalTo: inputsContainerView.heightAnchor, multiplier: 1/2).isActive = true
在上面的代码之前我已经将所有需要的控件添加到容器子视图...
// Add controls to the view
inputsContainerView.addSubview(listTextView)
inputsContainerView.addSubview(listImageButton)
inputsContainerView.addSubview(listImageClear)
inputsContainerView.addSubview(tableView)
如果我离开tableview,那么容器会显示其他三个字段。如果我添加了tableview,那么容器和所有其他三个控件都将消失。
如何将tableView添加到UIView并显示它?
以下是我定义UITable视图的方法
let tableView: UITableView = {
let tv = UITableView()
return tv
}()
作为比较,当我定义其他像这样的控件时,它们会在添加到子视图并以编程方式设置约束后显示正常
e.g。
// DEFINE
let listTextView: UITextView = {
let textView = UITextView()
textView.translatesAutoresizingMaskIntoConstraints = false
textView.text = ""
textView.textColor = defaultTextColor
textView.font = subtitleFont
textView.layer.borderColor = UIColor.black.cgColor
textView.layer.borderWidth = 1
textView.textAlignment = NSTextAlignment.left
return textView
}()
然后再
// Place - with constraints
// listTextView
listTextView.leftAnchor.constraint(equalTo: inputsContainerView.leftAnchor, constant: padFromLeft).isActive = true
listTextView.topAnchor.constraint(equalTo: inputsContainerView.topAnchor, constant: 10).isActive = true
listTextView.widthAnchor.constraint(equalTo: inputsContainerView.widthAnchor, multiplier: 9/16).isActive = true
listTextView.heightAnchor.constraint(equalTo: inputsContainerView.widthAnchor, multiplier: 5/16).isActive = true
答案 0 :(得分:0)
只是将我的评论添加为详细答案,以便其他人可以更快地看到解决方案并从中受益。
从apple documentation开始,要以编程方式设置自己的约束,您需要设置translatesAutoresizingMaskIntoConstraints to false
:
请注意,自动调整遮罩约束完全指定视图的大小和位置;因此,如果不引入冲突,则无法添加其他约束来修改此大小或位置。如果要使用“自动布局”动态计算视图的大小和位置,则必须将此属性设置为 false ,然后为视图提供非模糊,非冲突的约束集。
因此,在您的情况下,当您定义它时,您会错过为表格视图设置它。只需添加以下行:
tv.translatesAutoresizingMaskIntoConstraints = false