[英]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
,反之亦然吗? 另一种方式。
两个观察:
AutoresizingMask不会基于视图子视图的更改来扩展视图,而是基于超级视图中的更改来扩展视图。 这里没有兴趣。 通常在诸如由于方向更改而导致超级视图更改尺寸的事情上更有用。 从理论上讲,还有其他情况可能会使用autoresizingMask,但我不认为这是其中一种。
从逻辑上讲,您可以简单地计算出适合所需文本的文本标签的宽度,然后相应地设置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.