我正在使用 BoundingRectWithSize 取回一个 CGRect,它将适本地修复我的文本。 我以前有这个代码。
var maximumLabelSize: CGSize = CGSize(width: view.bounds.width-5, height: 150)
var maximumLabelSize: CGSize = CGSize(width: view.bounds.width-5, height: 150)
var labelRect: CGRect = (matches[indexPath.item].name as NSString).boundingRectWithSize(maximumLabelSize, options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: [NSFontAttributeName: UIFont.systemFontOfSize(16)], context: nil)
将字体更改为 HelviticaNeue-Bold 时,我的许多标签都没有全屏显示。我的假设是,由于我将字体更改为粗体,文本不再适合其边界 CGRects,因此将字符串剪短。
我建议的修复是编辑为我的文本创建初始适当边界 CGRect 的代码,以考虑到文本的粗体性质。这是我的尝试。
var labelRect: CGRect = (matches[indexPath.item].name as NSString).boundingRectWithSize(maximumLabelSize, options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: [NSFontAttributeName: UIFont(name: "HelveticaNeue-Bold", size: 16)], context: nil)
我收到一条错误消息,指出我提供的参数不正确。
Cannot invoke 'boundingRectWithSize' with an argument list of type '(CGSize, options: NSStringDrawingOptions, attributes: [String : UIFont?], context: nil)'
根据 iOS 开发者库,这些是合适的参数。
func boundingRectWithSize(_ size: CGSize,
options options: NSStringDrawingOptions,
attributes attributes: [String : AnyObject]?,
context context: NSStringDrawingContext?) -> CGRect
冲突在属性内部,显然是我更改的区域,但至少这证实了这一点。我不确定如何进一步寻求解决方案。任何有助于理解这一点的帮助将不胜感激。
最佳答案
在进一步分析我自己提供的 boundingRectWithSize 参数与 iOS 开发人员库中列出的参数之间的对比后,我想知道如果我将 UIFont 转换为 AnyObject 会发生什么。
var labelRect: CGRect = (matches[indexPath.item].name as NSString).boundingRectWithSize(maximumLabelSize, options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: [NSFontAttributeName: UIFont(name: "HelveticaNeue-Bold", size: 16) as! AnyObject], context: nil)
boundingRectWithSize 的属性参数接受类型 [String : AnyObject] 而我应该提供 [String : UIFont?]。我类型转换了我的 UIFont?到任何对象。这消除了错误,也解决了我的问题。粗体文本不再被缩短。已解决。
关于ios - BoundingRectWithSize - 选择使用的字体和字体大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31682343/