2016-04-23 9 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)'は役に立ちますか? –

+0

申し訳ありません、 'size.height = CGFloat(ceil(Float(size.height)))' –