我的观点和子视图出错

时间:2016-04-23 23:29:47

标签: xcode swift

我试图用子视图放置视图。视图有一个图像和一个文本,它们是子视图,但是当我运行应用程序时,它不会显示完整的文本。这是代码......

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    let ballonview = UIImageView()
    let label = UILabel()
    let turn = 1


    ballonview.frame = CGRectZero

    label.frame = CGRectZero
    label.backgroundColor = UIColor.clearColor()
    label.numberOfLines = 0
    label.lineBreakMode = NSLineBreakMode.ByWordWrapping
    label.font = label.font.fontWithSize(20)

    let message = UIView()
    message.frame = CGRectMake(-160, 48, view.frame.size.width, view.frame.size.height)
    message.addSubview(ballonview)
    message.addSubview(label)


    let text: NSString = "hola como estas"

    let size:CGSize = text.boundingRectWithSize(CGSizeMake(240.0, 480.0), options: NSStringDrawingOptions.UsesDeviceMetrics, attributes: [NSFontAttributeName: UIFont.systemFontOfSize(14.0)], context: nil).size


    var ballon:UIImage = UIImage()


    ballonview.frame = CGRectMake(320.0 - (size.width + 28.0), 2.0, size.width + 28.0, size.height + 15.0)
    ballon = UIImage(named:"green.png")!.stretchableImageWithLeftCapWidth(24, topCapHeight: 15)
    label.frame = CGRectMake(307.0 - (size.width + 5.0), 8.0, size.width + 5.0, size.height)

    ballonview.image = ballon;
    label.text = text as String
    view.addSubview(message)

}

那么,我该怎么办.. ??? 先谢谢!!

1 个答案:

答案 0 :(得分:1)

此处的问题是,在测量size和渲染时,您使用的是不同的字体大小。

font的{​​{1}}是20pt系统字体,用于衡量label的字体是14pt系统字体。因此size会比您预期的要小。

此外,如果您的字符长腿(例如sizeNSStringDrawingUsesLineFragmentOrigin,则应将绘图选项更改为g以获得正确的尺寸},j)。

参考:official NSString document

我建议您更改衡量y的方式:

size

因此它将匹配用于呈现let size: CGSize = text.boundingRectWithSize( CGSizeMake(240.0, 480.0), options: .UsesLineFragmentOrigin, attributes: [ NSFontAttributeName: label.font ], context: nil ).size 的字体。

我希望这个答案可以帮助你。