Ios 如何向UITableView添加编程约束?
我的课程设置如下:Ios 如何向UITableView添加编程约束?,ios,swift,uitableview,constraints,Ios,Swift,Uitableview,Constraints,我的课程设置如下: class SettingsController: UITableViewController { 我希望能够向UITableView添加约束,以便表格两侧的间距相等(它目前是一个全宽表格,所以在iPad上有点难看) 我已经读到,我不能向UITableViewController添加约束,相反,我必须向我的类添加UIViewController,向该类添加UITableView,然后我应该能够向TableView添加约束 我已经修改了类,并在下一行定义了UITableVie
class SettingsController: UITableViewController {
我希望能够向UITableView添加约束,以便表格两侧的间距相等(它目前是一个全宽表格,所以在iPad上有点难看)
我已经读到,我不能向UITableViewController
添加约束,相反,我必须向我的类添加UIViewController
,向该类添加UITableView
,然后我应该能够向TableView添加约束
我已经修改了类,并在下一行定义了UITableView
。下面是我的前两行:
class SettingsController: UIViewController {
var tableView = UITableView()
再往下看,我有以下代码将TableView附加到UIView
:
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(tableView)
}
应用程序构建成功,但当尝试访问此视图时,屏幕为空,因此我还无法尝试约束部分(如果我还原所描述的内容,屏幕会正确显示数据)
这个类中的许多现有函数引用了
tableView
,用于传递数据/设置行数等,但似乎我没有做正确的事情。。。有没有我遗漏的部分?因此,看起来您需要备份一个步骤,而不是尝试在TableViewController中嵌入UIViewController。您提到的建议意味着您的设置控制器应该是UIViewController的子类,并且您应该向该子类添加UITableView
向UITableView添加约束将比尝试使用UITableViewController更好
编辑
在获得任何数据之前,您应该能够实现这些约束。您将只看到一个空的表视图,但它仍将显示行。有时,如果你能看到你在处理什么,那么使用约束就更容易了。创建tableView时,可以使用以下工具:
var tableView=UITableView(框架:self.view)
至少能帮你确定方向
因此,在实现了所需的约束之后,您所缺少的似乎就是设置tableView的委托和数据源,并扩展视图控制器以实现这些方法。然后,您应该拥有数据,您可以享受辛勤工作带来的荣耀。下面是一个以编程方式创建表视图并将其添加到“普通”视图的简单示例: 您应该能够在不进行编辑的情况下运行此操作,并获得以下结果: 这是一个非常简单的例子,所以应该很容易看到发生了什么 如果您已经有了(我假设是复杂的)设置
UITableViewController
类,那么按照这个框架将您的设置转换为UIViewController
+UITableView作为子视图应该是非常简单的
或者,您可以将现有的UITableViewController
作为子视图控制器加载,并将其视图(tableview)添加为子视图。我只是展示了添加约束的另一种方法
首先,您需要设置view.translatesAutoresizingMaskIntoConstraints=false
,然后执行以下操作
// align tableView from the left and right
self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-8-[view]-8-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["view": tableView]))
// align tableView from the top and bottom
self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-8-[view]-8-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["view": tableView]))
它将为表视图提供关于self.view(它是superview)的顶部、底部、前导和尾随约束。您是否使用故事板?不,我是通过编程实现的。感谢您的建议,出于某种原因,使用frame:self.view
给了我一个错误(类型的值](NSObject)->()->SettingsController'没有成员“视图”
)。我尝试添加委托和数据源,但仍然获得空白视图…真是难住了!唐,非常感谢。我已经将它添加到我的项目中,可以完美地渲染它。正如您所建议的,我将遵循您的示例,并希望找出我在代码中出错的地方。。。再次感谢!
// align tableView from the left and right
self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-8-[view]-8-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["view": tableView]))
// align tableView from the top and bottom
self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-8-[view]-8-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["view": tableView]))