UILabel中的多行未显示全文

时间:2016-08-25 14:02:15

标签: ios swift uiscrollview label

在我的代码(Swift 2.0 iOS 9)中,我创建了一个def foo(): with lock: # only one thread can execute code there 并在ScrollView中添加了UIScrollView以显示大量文本。文本通过UILabel加载,并从包中的文件加载。

我使用了viewDidLoad()numberOfLines = 0,但只显示了8行文字。在代码下方,您将看到代码结果的图像。我已经为label.lineBreakMode = .ByWordWrappingUILabel添加了颜色以显示其边界。

UIScrollView

这是代码的结果:http://i.stack.imgur.com/Zh4En.png

我需要做什么才能显示所有文字?或者,是否有更好的方法来实现呈现信息文本的相同目标?

2 个答案:

答案 0 :(得分:2)

查看您的代码,您正在调用sizeToFit来自行制作标签尺寸,但是您将标签框架的宽度设置为某个值时只有几行,而高度保持不变。在sizeToFit调用期间,新宽度可能小于一个标签给自己的宽度,这就是你的一些文字不合适的原因。

试试这个:

let desiredLabelWidth = self.view.bounds.size.width - 20
let size = label.sizeThatFits(CGSize(desiredLabelWidth, CGFloat.max))
label.frame = CGRect(x: 10, y: y, width: desiredLabelWidth, height: size.height)

这会向标签询问具有给定宽度的尺寸,然后相应地设置框架。

同样在您的代码中,自动调整遮罩label.autoresizingMask = .FlexibleWidth没有意义,因为宽度会与超级视图一起改变,但高度不会,因此标签的新尺寸与其具有的文字不匹配。

答案 1 :(得分:0)

您需要“证明”您的文字,就像您在Microsoft Word中一样!

您需要NSMutableParagraphStyleNSAttributedString并行使用才能将文字显示为对齐。

必须将NSBaselineOffsetAttributedName设置为0.0。

示例代码

let sampleText = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."

let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = NSTextAlignment.Justified

let attributedString = NSAttributedString(string: sampleText,
    attributes: [
        NSParagraphStyleAttributeName: paragraphStyle,
        NSBaselineOffsetAttributeName: NSNumber(float: 0)
    ])

let label = UILabel()
label.attributedText = attributedString
label.numberOfLines = 0
label.frame = CGRectMake(0, 0, 400, 400)


let view = UIView()
view.frame = CGRectMake(0, 0, 400, 400)
view.addSubview(label)