Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何向UITableView添加编程约束?_Ios_Swift_Uitableview_Constraints - Fatal编程技术网

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]))