ste*_*CDP 2 uitableview ios nslayoutconstraint swift ios8
我有一个带有tableView的ViewController.我已经在故事板中进行了设置.有没有办法以编程方式设置tableView的约束?我试图从ViewController中的tableView设置一个IBOutlet并为其添加约束.但那没用.
这是我的ViewController
import UIKit
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
addTableViewConstraints()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func addTableViewConstraints() {
tableView.setTranslatesAutoresizingMaskIntoConstraints(false)
var topConstraint = NSLayoutConstraint(item: self.tableView, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Top, multiplier: 1.0, constant: 20)
var leadingContraint = NSLayoutConstraint(item: self.tableView, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Leading, multiplier: 1.0, constant: 0)
var trailingConstraint = NSLayoutConstraint(item: self.tableView, attribute: NSLayoutAttribute.Trailing, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Trailing, multiplier: 1.0, constant: 0)
var bottomConstraint = NSLayoutConstraint(item: self.tableView, attribute: NSLayoutAttribute.Bottom, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Bottom, multiplier: 1.0, constant: 0)
self.view.addConstraints([topConstraint, leadingContraint, trailingConstraint, bottomConstraint])
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 5
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! UITableViewCell
cell.textLabel?.text = "Cell"
return cell
}
}
Run Code Online (Sandbox Code Playgroud)
或者我是否必须通过代码制作我的tableView?
谢谢!
您在其中一条评论中提到要在用户按下按钮时更改约束.您可以通过设置约束的出口来减少代码.在文档大纲页面中找到约束,然后按CTRL +拖动到您的类以创建约束的出口.然后,您可以更轻松地更改代码中的常量.
@IBOutlet weak var topConstraint: NSLayoutConstraint!
@IBOutlet weak var bottomConstraint: NSLayoutConstraint!
func buttonPressed() {
if (/* some condition */) {
self.topConstraint.constant += 8
self.bottomConstraint.constant += 8
} else {
// Return the constraints to normal, or whatever you want to do
}
}
Run Code Online (Sandbox Code Playgroud)
addTableViewConstraints通过以下方式更改方法:
func addTableViewConstraints() {
tableView.setTranslatesAutoresizingMaskIntoConstraints(false)
var topConstraint = NSLayoutConstraint(item: self.tableView, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Top, multiplier: 1.0, constant: 20)
var leadingContraint = NSLayoutConstraint(item: self.tableView, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Leading, multiplier: 1.0, constant: 0)
var trailingConstraint = NSLayoutConstraint(item: self.tableView, attribute: NSLayoutAttribute.Trailing, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Trailing, multiplier: 1.0, constant: 0)
var bottomConstraint = NSLayoutConstraint(item: self.tableView, attribute: NSLayoutAttribute.Bottom, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Bottom, multiplier: 1.0, constant: 0)
NSLayoutConstraint.activateConstraints([topConstraint, leadingContraint, trailingConstraint, bottomConstraint])
}
Run Code Online (Sandbox Code Playgroud)
更新:
NSIBPrototypingLayoutConstraint您正在运行的约束(以及引起异常)由Interface Builder自动生成,以使您的Storyboard或XIB视图布局不明确.这样做非常狡猾,但它会自动添加所需的最小约束,以便完全指定每个模糊视图的位置和大小.
解决此问题的方法是在Interface Builder中添加所需的最小约束,以便完全指定每个视图的位置和大小,然后选择每个不需要的约束,转到右侧边栏属性检查器,并选中Placeholder旁边的框- 在构建时删除.
我通过以下方式解决了这个问题:
UITableView.


现在,您可以在代码中手动添加所有自动布局约束,而不会发出任何警告.
我希望这对你有帮助.
| 归档时间: |
|
| 查看次数: |
6451 次 |
| 最近记录: |