将UILabel置于UITableView标头内

时间:2016-03-24 17:11:27

标签: ios swift uitableview nslayoutconstraint

我将UIView添加为UITableView标头,但是当我这样做时,我的约束就崩溃了。我想让我的chapterVerseLabel居中在圈内:

enter image description here

到目前为止,我通过这样做完成了这个:

    var allConstraints = [NSLayoutConstraint]()
    let views = ["tableView" : tableView, "containerView" : containerView, "chapterVerseLabel" : chapterVerseLabel]
    allConstraints += NSLayoutConstraint.constraintsWithVisualFormat("V:|-70-[chapterVerseLabel]-70-|", options: [], metrics: nil, views: views)
    NSLayoutConstraint.activateConstraints(allConstraints)

但我不确定如何让它居中。似乎我试图将它集中在一起,不遵守在UITableView标题中居中的更严格的规则。

欢迎所有想法。

更新

我尝试添加.CenterX值:

    let leftConstraint = NSLayoutConstraint(item: chapterVerseLabel, attribute: .CenterY, relatedBy: .Equal, toItem: containerView, attribute: .CenterY, multiplier: 1.0, constant: 0.0)
    containerView.addConstraint(leftConstraint)
    let rightConstraint = NSLayoutConstraint(item: chapterVerseLabel, attribute: .CenterX, relatedBy: .Equal, toItem: containerView, attribute: .CenterX, multiplier: 1.0, constant: 0.0)
    containerView.addConstraint(rightConstraint)

但这是结果:

enter image description here

现在,chapterVerseLabel位于我的containerView中,该视图被指定为tableView.tableHeaderView。像这样:

tableView.tableHeaderView = containerView

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您的约束的问题在于您已经通过给出Top和Bottom约束来限制标签​​。此外,我没有看到前导和尾随约束您实际上必须根据您的要求垂直或水平或两者对齐标签。

NSLayoutConstraint *yCS =[NSLayoutConstraint constraintWithItem:chapterVerseLabel attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:containerView attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0.0];
[containerView addConstraint:yCS];

NSLayoutConstraint *xCS =[NSLayoutConstraint constraintWithItem:chapterVerseLabel attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:containerView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0.0];
[containerView addConstraint:xCS];

假设containerView是从headerforView委托方法返回的标题视图。您需要为标签提供高度和宽度。

答案 1 :(得分:0)

中心有一个uiview。如果要在中心的圆形视图中添加视图(1/4),则无法使用可视格式进行操作。我假设您想要居中chapterVerseLabel。 所以:

chapterVerseLabel.translatesAutoresizingMaskIntoConstraints = false
yourCircularView.addsubView(chapterVerseLabel)
let xCenterConstraint = NSLayoutConstraint(item: chapterVerseLabel, attribute: .CenterX, relatedBy: .Equal, toItem: view2, attribute: .CenterX, multiplier: 1, constant: 0)
superview.addConstraint(xCenterConstraint)

let yCenterConstraint = NSLayoutConstraint(item: chapterVerseLabel, attribute: .CenterY, relatedBy: .Equal, toItem: view2, attribute: .CenterY, multiplier: 1, constant: 0)
superview.addConstraint(yCenterConstraint)