我试图用子视图放置视图。视图有一个图像和一个文本,它们是子视图,但是当我运行应用程序时,它不会显示完整的文本。这是代码......
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)
}
那么,我该怎么办.. ??? 先谢谢!!
答案 0 :(得分:1)
此处的问题是,在测量size
和渲染时,您使用的是不同的字体大小。
font
的{{1}}是20pt系统字体,用于衡量label
的字体是14pt系统字体。因此size
会比您预期的要小。
此外,如果您的字符长腿(例如size
,NSStringDrawingUsesLineFragmentOrigin
,则应将绘图选项更改为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
的字体。
我希望这个答案可以帮助你。