iOS自动布局:将UILabel的左边缘与容器中的水平中心对齐?

Posted

技术标签:

【中文标题】iOS自动布局:将UILabel的左边缘与容器中的水平中心对齐?【英文标题】:iOS Autolayout: Align left edge of a UILabel with horizontal center in container? 【发布时间】:2013-11-12 20:07:26 【问题描述】:

所以我正在尝试自定义 UITableViewCell,如下所示:

我正在尝试让细节标签左对齐并将标题标签上的内容设置得更高。

所以我面临的挑战是我希望标题单元格第二列的左边缘与整个视图的中心对齐。

有没有办法做到这一点?

【问题讨论】:

【参考方案1】:

尝试使用几个分组视图,每列一个。将每个列视图的外边缘固定到单元格内容视图的边缘,然后为列视图添加等宽约束。

一旦你的包含列视图就位,你就可以在每个视图中布局标签。

【讨论】:

谢谢!它确实有效...... :) @darren102 还提到将其嵌入另一个视图中使这成为可能。【参考方案2】:

添加等宽约束,向左视图添加前导空间约束,在右侧添加尾随空间,以及它们之间的水平间距。

【讨论】:

【参考方案3】:

当然,您可以将它们放在 UIView 中,并且视图左边缘将等于 CenterX,因此它们将在中间对齐。或者您可以将顶部标题单元格与 CenterX 对齐,并使每个标题的前缘与之匹配。您可以通过多种方式实现您在此处提出的要求。

NSLayoutContraint *constraint = [NSLayoutConstraint constraintWithItem:label attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1.0f constant:0.0f];
[self.view addConstraint:constraint];

NSArray *constraints [NSLayoutConstraint
                      constraintsWithVisualFormat:@"V:|[label1]-(5)-[label2]-(5)-[label3]|"
                      options:NSLayoutFormatAlignAllLeading
                      metrics:nil
                      views:@ @"label1" : label1, @"label2" : label2, @"label3" : label3 ];
[self.view addConstraints:constraints];

上面只是示例,如果您也愿意,可以在代码中执行此操作,self.view 是一个视图,但如果您想要 UITableViewCell 的内容视图,您可以将其切换到该视图。

【讨论】:

谢谢@darren102!将它们放在单独的 UIView 中的想法完成了这项工作。我选择@lintmachine 作为正确答案,因为它更直观。【参考方案4】:

我无法得到上述建议,所以我以另一种方式进行。

InnerView1 50% 宽度的 ContentView 并固定在左侧 InnerView2 50% 宽度的 ContentView 并固定在右侧

简单。

【讨论】:

以上是关于iOS自动布局:将UILabel的左边缘与容器中的水平中心对齐?的主要内容,如果未能解决你的问题,请参考以下文章

iOS:自动布局中的多行 UILabel

如何使用自动布局将两个具有动态高度的 UILabel 与 UICollectionViewCell 的底部对齐

iOS中文本字段和标签的自动布局

自动布局动画保持 UILabel 居中

iOS 自动布局小结

iOS 自动布局 UILabel 换行