ios - 以编程方式动态居中 2 行文本,每行长度大致相等

标签 ios swift uilabel

我的情况是,由于本地化,我有一行文本的长度可能会有所不同。这将需要显示在屏幕上,使每条线的长度大致相等,并且居中。

这是我很长的一行。

应该是这样的

  This is my
very long line.

最佳答案

所以我对此进行了尝试,并得到了一些可以按我现在想要的方式工作的东西。

我获取一个本地化字符串,将其设置为一个空标签,然后找出它的大小。 (橙色只是为了说明目的)

根据标签的大小,我将其除以 1.8,这为我提供了一些缓冲空间来解决不一致的字长(同样,我不知道这里会提前出现什么)。最后,我将高度乘以 2.0,并将其设置为我的新框架。最后,我将它添加到 View 中。

这已经支持了一些示例字符串,但需要对其进行修改以处理超过 2 行(目前,这不是问题)。

let text = NSLocalizedString("This is my very long line of text.", comment: "")
let instructionLabel = UILabel()
instructionLabel.text = text
instructionLabel.textAlignment = .center
instructionLabel.backgroundColor = .orange
instructionLabel.numberOfLines = 0
let size = instructionLabel.intrinsicContentSize
let newSize = CGSize(width: size.width / 1.8, height: size.height * 2.0)
let rect = CGRect(x: 20, y: 100, width: newSize.width, height: newSize.height)
instructionLabel.frame = rect
view.addSubview(instructionLabel)

产生以下输出:

enter image description here

还有一个更长的:

enter image description here

只是为了一些变化,这是上面的第二个字符串,但是是阿拉伯语:

enter image description here

关于ios - 以编程方式动态居中 2 行文本,每行长度大致相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42842442/

相关文章:

ios - WCSession:使用 transferUserInfo 或 sendMessage 的最佳方式?

ios - 在 UILabel 中覆盖 "text"在 iOS 6 中不起作用

UILabel 在 IOS7 中错误地呈现文本

ios - Mapview 的 selectAnnotation 方法不适用于 iOS7

ios - 将数组声明为类的属性并在 Swift 中使用它

ios - 创建一个转换,当 View 被移除时,它的移除依赖于 @State 值

ios - 我可以创建一个我所有的 View Controller 都可以访问的类吗

ios - 如何使用 NSMutableArray 进行排序?

arrays - swift 4 : How many times an element from a String array occurs in a String?

objective-c - 带有更多...文本的 UILabel