我的情况是,由于本地化,我的文本行长度会有所不同。这将需要显示在屏幕上,使得每条线的长度大致相等,并且居中。
这是我很长的路线。
应该是这样的
This is my
very long line.
答案 0 :(得分:2)
所以我对此进行了一次破解,得到的东西现在就像我想要的那样。
我采用本地化字符串,将其设置为空标签,并找出它的大小。 (橙色仅用于说明目的)
根据标签的大小,我将其除以1.8,这给了我一些缓冲空间来解释不一致的单词大小(再次,我不知道提前会有什么)。最后,我将高度乘以2.0,并将其设置为我的新框架。最后,我将它添加到视图中。
虽然需要修改以处理超过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)
产生以下输出:
还有一个更长的一个:
只是有些变化,这是上面的第二个字符串,但是用阿拉伯语:
答案 1 :(得分:0)
你可以这样设置对齐。
myLabel.textAlignment = .center
同时将行数设置为0.如果需要特定宽度,请设置preferredMaxLayoutWidth
属性,如下所示:
myLabel.preferredMaxLayoutWidth = 80
myLabel.numberOfLines = 0
答案 2 :(得分:0)
如果您希望它适用于任意本地化(假设使用空格的语言),您需要一种算法将文本分割为空格,然后循环遍历顶部和底部文本的每个组合,测量其宽度,以查看给出了最均匀分布的尺寸。这感觉就像是矫枉过正。
完成了大量的本地化后,最好的办法是在.strings文件中手动插入\n
个字符,以调整视觉上不愉快的中断。依赖固定宽度可以适用于多种语言,但不会为您提供所需的灵活性。