Jef*_*Jef 5 attributes objective-c nsstring
我想知道屏幕上显示的NSString的宽度(以像素为单位).所以我可以使NSTextField的边界恰好是字符串本身的长度.所以我用IB的"标签"的NSTextField并为那些谁不知道我的意思,我根据标题为"标签"标签,字体"龙力大13像素",不可选,不可编辑,常规尺寸,无背景, IB的宽度为38px宽.
如果我想以编程方式获取其宽度,我会使用
[@"Label" sizeWithAttributes: [NSDictionary dictionaryWithObject: [NSFont fontWithName: @"Lucida Grande" size: 13] forKey: NSFontAttributeName]].width
Run Code Online (Sandbox Code Playgroud)
哪个会给我33.293457.所以这大约是实际宽度的5 px ..
我相信你注意到的是控件框架和它的布局框架之间的区别.有关说明,请参阅帧与布局框架.
你在计算宽度时做的正确.对于Label,控件的顶部或底部没有额外的填充,这就是为什么您没有看到控件高度的问题.但是,在控件的左侧和右侧,还有三个像素.这可以通过查看IB中Label控件的Frame和Layout来验证.
所以,你注意到的~5个像素实际上就是6个.一旦你考虑到这个填充,你应该没有进一步的麻烦.
不幸的是,没有API来确定各种控件的填充是什么(Push Buttons每侧额外增加6个像素).我建议在http://bugreport.apple.com上提交一份错误报告- Apple确实根据他们提供的API提供了一些API.虽然IB会告诉你,你需要自己编写这些值.如果他们在下一个操作系统版本中发生更改,则需要更新您的应用程序.
归档时间: |
|
查看次数: |
7286 次 |
最近记录: |