繁体   English   中英

使两个相邻的UILabel都在内侧边缘对齐

[英]Getting two adjacent UILabels to both align on the inside edge

我有一个包含两个UILabel对象的UIView ,这些对象以编程方式填充。 我希望左边的UILabel右对齐,右边的UILabel左对齐。 这是我漂亮的ASCII表示形式:

 ___________________
|  ______   ______  |
| |  ASDF| |ASDF  | |
| |______| |______| |
|___________________|

我尝试了各种遮罩和对齐方式,但无济于事。 我认为这是正确的解决方案,因此也许有人可以指出我理解上的缺陷。

容器UIView需要UIViewAutoResizingFlexibleWidth以便可以扩展以适合可变宽度的标签。 左侧和右侧的UILabel需要UIViewAutoResizingFlexibleWidth以便它们展开以适合可变宽度的内容。 左边的UILabel需要UIViewAutoresizingFlexibleRightMargin以便左边距保持固定。 正确的UILabel需要UIViewAutoresizingFlexibleLeftMargin以便使右边距保持固定。

此实现的概念问题:

  • 随着文本的扩展,它们可以相互扩展,因为它们仍然适合容器

我遇到了重叠问题,而且右边距似乎并没有像应有的那样固定,而是右边仅有很大的空隙。

有谁知道这可能是一个解决方案?

UILabel视图不会根据文本自动调整其大小。 您可能需要在每次更改文本时调用sizeToFit 如果要换行,还需要手动分配行数。

另外,左边的标签不应该是UIViewAutoresizingFlexibleLeftMargin ,反之亦然吗? 另一种方式。

两个观察:

  1. AutoresizingMask不会基于视图子视图的更改来扩展视图,而是基于超级视图中的更改来扩展视图。 这里没有兴趣。 通常在诸如由于方向更改而导致超级视图更改尺寸的事情上更有用。 从理论上讲,还有其他情况可能会使用autoresizingMask,但我不认为这是其中一种。

  2. 从逻辑上讲,您可以简单地计算出适合所需文本的文本标签的宽度,然后相应地设置UILabel的框架。

要计算两个文本标签的大小,设置它们的text属性后,可以执行以下操作:

CGSize leftSize  = [leftLabel.text  sizeWithFont:leftLabel.font  forWidth:self.view.frame.size.width lineBreakMode:UILineBreakModeWordWrap];
CGSize rightSize = [rightLabel.text sizeWithFont:rightLabel.font forWidth:self.view.frame.size.width lineBreakMode:UILineBreakModeWordWrap];

现在您知道了两个标签的大小,您可以相应地调整两个标签的框架以及它们的视图。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM