2016-04-23 72 views
0

我正在嘗試放置子視圖。該視圖有一個圖像和一個文本,這是子視圖,但是當我運行該應用程序時,它不顯示完整的文本。這裏是代碼...我的意見和子視圖出錯

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

這裏的問題是您在測量size和渲染時使用了不同的字體大小。

fontlabel是20pt系統字體,用於測量size的字體是14pt系統字體。因此size將會比您預期的要小。

此外,繪圖選項應該按順序,如果你有長腿(如gjy)字符,以獲得正確的尺寸改爲NSStringDrawingUsesLineFragmentOrigin

參考:official NSString document

我建議你改變你的方法測量size

let size: CGSize = text.boundingRectWithSize(
    CGSizeMake(240.0, 480.0), 
    options: .UsesLineFragmentOrigin, 
    attributes: [ 
     NSFontAttributeName: label.font 
    ], 
    context: nil 
).size 

所以它將匹配您使用的渲染label的字體。

我希望這個答案能幫助你。

+0

當我把一些字母,如「j」或「g」,這些字母很可愛......我該怎麼辦? –

+0

'size.height = ceil(size.height)'help? –

+0

對不起,應該是'size.height = CGFloat(ceil(Float(size.height)))' –