【发布时间】:2017-01-07 07:29:30
【问题描述】:
我有一个 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
}()
作为比较,当我像这样定义其他控件时,它们在添加到子视图并以编程方式设置约束后显示良好
例如
// 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
【问题讨论】:
-
您能否将
tv.translatesAutoresizingMaskIntoConstraints = false添加到您的表格视图属性中,看看之后会发生什么 -
你为什么不使用show hide?span>
-
谢谢!添加 tv.translatesAutoresizingMaskIntoConstraints = false 是答案。
-
@john 很好,很高兴能帮到你。我只是将我的评论添加为详细的答案,以便其他人可以更好地从中受益。如果您觉得冷,那就太好了,只需将其标记为正确,这也将有助于其他人节省时间。谢谢
标签: swift uitableview autolayout swift3 programmatically-created