我一直试图让这种拉动以刷新控制为中心一段时间,我似乎无法让约束起作用。我在这里完全遗漏了什么吗?我阅读了一些教程,并在另一个问题中阅读,通常您会向父对象添加位置约束。当我尝试将约束添加到刷新控件时,它告诉我它无法满足约束。
// Set up the refresh control and add it to the tableView
self.refreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
self.refreshControl.addTarget(self, action: "refresh:", forControlEvents: UIControlEvents.ValueChanged)
self.tableView.addSubview(refreshControl)
// Center the refreshControl
var centerControl: NSLayoutConstraint = NSLayoutConstraint(
item: refreshControl,
attribute: NSLayoutAttribute.CenterX,
relatedBy: NSLayoutRelation.Equal,
toItem: tableView,
attribute: NSLayoutAttribute.CenterX, multiplier: 1.0, constant: 1.0)
tableView.addConstraint(centerControl)
编辑:我试图像建议的那样设置refreshControl的大小,它仍然显示在右边,就像600宽度一样,如Any Height Any Width视图控制器。因此,显然试图设置大小没有任何改变
更新的代码:
override func viewDidLoad() {
super.viewDidLoad()
// Set tableView delegate and dataSource
tableView.delegate = self
tableView.dataSource = self
// Set up the refresh control and add it to the tableView
self.refreshControl = UIRefreshControl(frame: CGRect(x: 0, y: 0, width: view.bounds.width, height: 40))
self.refreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
self.refreshControl.addTarget(self, action: "refresh:", forControlEvents: UIControlEvents.ValueChanged)
self.tableView.addSubview(refreshControl)
// Center the refreshControl
let centerControl: NSLayoutConstraint = NSLayoutConstraint(
item: refreshControl,
attribute: NSLayoutAttribute.CenterX,
relatedBy: NSLayoutRelation.Equal,
toItem: refreshControl.superview,
attribute: NSLayoutAttribute.CenterX, multiplier: 1.0, constant: 0)
refreshControl.superview?.addConstraint(centerControl)
}
代码更新#2:我已经尝试了这个并且它也没有用。我应该有一个tableViewController来管理refreshControl吗?当我添加任何这些约束(甚至单独)时,刷新控件会随表一起拖动。当我不添加约束时,它会保持不变。我想要的只是获得它所以图像和文字并不是一直到右边!否则它会起作用。
override func viewDidLoad() {
super.viewDidLoad()
// Set tableView delegate and dataSource
tableView.delegate = self
tableView.dataSource = self
// Set up the refresh control and add it to the tableView
refreshControl = UIRefreshControl()
refreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
refreshControl.addTarget(self, action: "refresh:", forControlEvents: UIControlEvents.ValueChanged)
tableView.addSubview(refreshControl)
refreshControl.setTranslatesAutoresizingMaskIntoConstraints(false)
// Create the constraints and add them
var constX: NSLayoutConstraint =
NSLayoutConstraint(item: refreshControl,
attribute: NSLayoutAttribute.CenterX,
relatedBy: NSLayoutRelation.Equal,
toItem: tableView,
attribute: NSLayoutAttribute.CenterX,
multiplier: 1.0, constant: 0)
tableView.addConstraint(constX)
var constW: NSLayoutConstraint =
NSLayoutConstraint(item: refreshControl,
attribute: NSLayoutAttribute.Width,
relatedBy: NSLayoutRelation.Equal,
toItem: tableView,
attribute: NSLayoutAttribute.Width,
multiplier: 1.0, constant: 0)
tableView.addConstraint(constW)
var constH: NSLayoutConstraint =
NSLayoutConstraint(item: refreshControl,
attribute: NSLayoutAttribute.Height,
relatedBy: NSLayoutRelation.Equal,
toItem: nil,
attribute: NSLayoutAttribute.NotAnAttribute,
multiplier: 1.0, constant: 50)
tableView.addConstraint(constH)
}
答案 0 :(得分:1)
尝试禁用自动调整遮罩约束:
self.refreshControl.setTranslatesAutoresizingMaskIntoConstraints(false)
答案 1 :(得分:0)
您只需将约束设置为使用parent水平居中刷新控件。
您还需要设置
答案 2 :(得分:0)
实际上,您不必自己设置UIRefreshControl的框架或约束。
您需要一个UITableViewController并使用您的实例设置refreshControl
属性。
示例:
let tableViewController = UITableViewController()
tableViewController.refreshControl = UIRefreshControl()
TableViewController负责管理refreshControl: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableViewController_Class/index.html#//apple_ref/occ/instp/UITableViewController/refreshControl