|我在我的視圖控制器中使用自定義UITableViewCell(單元格)的TableView(alertTableView)。對於這個UITableViewCell我想設置一些約束;如何在表視圖中使用VFL約束定製單元格
- 單元格需要水平調整大小以匹配屏幕寬度,並且間距爲50pts。左和右。
- 細胞的高度是10pts
- 細胞之間我想有一個垂直2點的小空間。
要做到這一點,我用VFL添加約束,但約束沒有設置/尊重。我假設我必須在AlertTableView上設置約束,而不是在視圖上。無論如何嘗試過,但正如我所預料的那樣,這沒有什麼區別。
/*
VFL constraints Table View Cell
*/
let cell:ReportTableviewCell = self.alertTableView.dequeueReusableCellWithIdentifier("cell") as! ReportTableviewCell
cell.translatesAutoresizingMaskIntoConstraints = false
alertTableView.addSubview(cell)
let cellDictionary = ["ReportTableviewCell": cell]
alertTableView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-(50)-[ReportTableviewCell]-(50)-|",options: [], metrics: nil, views: cellDictionary))
alertTableView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[ReportTableviewCell(cellHeight)]-(cellVSpacing)-|",options: [], metrics: ["cellHeight" : 40, "cellVSpacing" : 2], views: cellDictionary))
什麼做錯了?該示例的
==新修訂==
// Register ReportCell
let nib = UINib(nibName: "ReportCell", bundle: nil)
alertTableView.registerNib(nib, forCellReuseIdentifier: "cell")
/*
VFL constraints Table View Cell
*/
let cell:ReportTableviewCell = self.alertTableView.dequeueReusableCellWithIdentifier("cell") as! ReportTableviewCell
cell.translatesAutoresizingMaskIntoConstraints = false
alertTableView.addSubview(cell)
var cellAllConstraints = [NSLayoutConstraint]()
let cellDictionary = ["ReportTableviewCell": cell,
"reportCellDateTime": cell.reportCellDateTimeOutlet]
let cellHorizontalConstraints = NSLayoutConstraint.constraintsWithVisualFormat("H:|-50-[ReportTableviewCell]-50-|",options: [], metrics: nil, views: cellDictionary)
let cellVerticalConstraints = NSLayoutConstraint.constraintsWithVisualFormat("V:|[ReportTableviewCell(cellHeight)]-(cellVSpacing)-|",options: [], metrics: ["cellHeight" : 10, "cellVSpacing" : 2], views: cellDictionary)
cellAllConstraints += cellHorizontalConstraints
cellAllConstraints += cellVerticalConstraints
NSLayoutConstraint.activateConstraints(cellAllConstraints)
// set constraint on UILabel reportCellDateTimeOutlet in cell ReportCell
cellAllConstraints.removeAll()
let dateTimeHorizontalConstrains = NSLayoutConstraint.constraintsWithVisualFormat("H:|-50-[reportCellDateTime]-|",options: [], metrics: nil, views: cellDictionary)
cellAllConstraints += dateTimeHorizontalConstrains
NSLayoutConstraint.activateConstraints(cellAllConstraints)
時錯誤地增加一個細胞或的UILabel到的UITableView像alertTableView.addSubview(cell.reportCellDateTimeOutlet)
一個隱藏的小區被添加到拖累頂電池時變成可見的UITableView的。正如bsmith11指出的那樣,這是錯誤的。
使用一個UITableView自定義單元格和設置在該小區中的特定的UILabel的約束時儘管如此,約束不受影響。
let cell:ReportTableviewCell = self.alertTableView.dequeueReusableCellWithIdentifier("cell") as! ReportTableviewCell
var cellAllConstraints = [NSLayoutConstraint]()
let cellDictionary = [
"reportCellDateTime": cell.reportCellDateTimeOutlet,
"reportCellViewedIndicator" : cell.reportCellViewedIndicatorOutlet,
"reportCellDescription" : cell.reportCellDescriptionOutlet ]
cell.reportCellDateTimeOutlet.translatesAutoresizingMaskIntoConstraints = false
let dateTimeHorizontalConstraints = NSLayoutConstraint.constraintsWithVisualFormat("H:|-50-[reportCellDateTime(300)]-|",options: [], metrics: nil, views: cellDictionary)
cellAllConstraints += dateTimeHorizontalConstraints
NSLayoutConstraint.activateConstraints(cellAllConstraints)
正如bsmith11所示,我將代碼從ViewController移到了擴展UITableViewCell的類中。還改變了從VFL到佈局錨的編程應用約束。不幸的是我不適合。
class ReportTableviewCell : UITableViewCell {
@IBOutlet weak var reportCellViewedIndicatorOutlet: UIImageView!
@IBOutlet weak var reportCell: UIView!
override func awakeFromNib() {
super.awakeFromNib()
// Internal border
self.layer.borderColor = UIColor(red: 245/255, green: 166/255, blue: 35/255, alpha: 1.0).CGColor
self.layer.cornerRadius = 8.0
self.layer.masksToBounds = true
self.layer.borderWidth = 4.0
reportCell.translatesAutoresizingMaskIntoConstraints = false
reportCellViewedIndicatorOutlet.bottomAnchor.constraintEqualToAnchor(reportCell.bottomAnchor, constant: 10)
reportCellViewedIndicatorOutlet.rightAnchor.constraintEqualToAnchor(reportCell.rightAnchor, constant:-10)
reportCellDescriptionOutlet.translatesAutoresizingMaskIntoConstraints = false
reportCellDescriptionOutlet.leftAnchor.constraintEqualToAnchor(reportCell.leftAnchor, constant: 10).active = true reportCellDescriptionOutlet.rightAnchor.constraintEqualToAnchor(reportCell.rightAnchor, constant: 10).active = true
...
我的確的意思是,固定它的問題。雖然沒有解決這個問題。 – pcvnes