UILabel byWordWrapping行为不端

时间:2015-07-07 21:27:51

标签: ios swift text uilabel word-wrap

这是我的UILabel的代码...

    var maximumLabelSize: CGSize = (chosenSpecies.identifyingCharacteristics![index] as NSString).sizeWithAttributes([NSFontAttributeName: UIFont.systemFontOfSize(16)])
    var identifyingCharacteristicsInformation = UILabel(frame: (CGRectMake(leftMargin, spacingValue, maximumLabelSize.width, maximumLabelSize.height))) 
    identifyingCharacteristicsInformation.font = UIFont(name: "HelveticaNeue-Light", size: informationTextSize)
    identifyingCharacteristicsInformation.textAlignment = NSTextAlignment.Left
    identifyingCharacteristicsInformation.text = chosenSpecies.identifyingCharacteristics![index]
    identifyingCharacteristicsInformation.text = identifyingCharacteristicsInformation.text!.capitalizedString
    identifyingCharacteristicsInformation.textColor=UIColor(red:0.0, green:0.0, blue:0.0, alpha:1)
    identifyingCharacteristicsInformation.numberOfLines = 0
    identifyingCharacteristicsInformation.lineBreakMode = NSLineBreakMode.ByWordWrapping
    identifyingCharacteristicsInformation.preferredMaxLayoutWidth = pictureContainer.frame.width                  
    ScrollView.addSubview(identifyingCharacteristicsInformation)
    spacingValue += identifyingCharacteristicsInformation.frame.height
    scrollView.contentSize.height += identifyingCharacteristicsInformation.frame.height

以下是发生的事情。这些“特征”中的每一个都使用上面的代码在for循环中打印。如您所见,屏幕上长时间运行的特征。

http://imgur.com/hbinE5n

我一直在网上搜索,原因是为什么这可能会发生几个小时而且已经枯竭了。有没有人知道为什么会这样?我在使用自动换行方面遇到了困难,因为我的理解并非始终如一。通过实现这两行,我能够在我的代码中的其他地方应用它。

label.numberOfLines = 0
label.lineBreakMode = NSLineBreakMode.ByWordWrapping

这是我试图实施Eric Qian的建议。我目前正在努力应用它。

var maxSize: CGSize = CGSize(width: 320, height: 100)
var maximumLabelSize: CGRect = (chosenSpecies.identifyingCharacteristics![index] as NSString).boundingRectWithSize(maxSize, options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: [NSFontAttributeName: UIFont.systemFontOfSize(16)], context: nil)

1 个答案:

答案 0 :(得分:0)

检查标签的宽度。我相信它超越了屏幕界限。你需要使用

CGSize maxSize = CGSizeMake(320.0, 1000.0);
CGSize maximumLabelSize = [string boundingRectWithSize:maxSize
                     options:NSStringDrawingUsesLineFragmentOrigin
                  attributes:@{NSFontAttributeName: UIFont.systemFontOfSize(16)} 
                     context:nil];

而不是sizeWithAttributes来获取正确的字符串大小。由于sizeWithAttributes将整个字符串呈现在一行中。