From 2e101d88b7a51bd39f910c35438a167b96f412d9 Mon Sep 17 00:00:00 2001 From: Alexey Gerasimov Date: Fri, 17 Jun 2016 17:53:48 +0300 Subject: [PATCH 1/2] NSString height-based width calculation added --- .../NSString/NSString+SizeCalculation.swift | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/LeadKit/LeadKit/Extensions/NSString/NSString+SizeCalculation.swift b/LeadKit/LeadKit/Extensions/NSString/NSString+SizeCalculation.swift index f6d35a93..de2682b7 100644 --- a/LeadKit/LeadKit/Extensions/NSString/NSString+SizeCalculation.swift +++ b/LeadKit/LeadKit/Extensions/NSString/NSString+SizeCalculation.swift @@ -47,7 +47,7 @@ extension NSString { - returns: minimum number of lines */ - func numberOfLinesWith(width: CGFloat, attributes: [String: AnyObject]) -> UInt { + public func numberOfLinesWith(width: CGFloat, attributes: [String: AnyObject]) -> UInt { guard let font = attributes[NSFontAttributeName] as? UIFont else { preconditionFailure("Value for NSFontAttributeName should be defined in attributes") } @@ -77,5 +77,20 @@ extension NSString { public func widthWith(attriutes: [String: AnyObject]) -> CGFloat { return CGFloat(ceil(Double(sizeWithAttributes(attriutes).width))) } + + /** + method which calculates string width based on given height and character attributes + + - parameter height: maximum height of string + - parameter attributes: dictionary with string character attributes + + - returns: string width + */ + public func widthWith(height height: CGFloat, attributes: [String: AnyObject]?) -> CGFloat { + return self.boundingRectWithSize(CGSize(width: CGFloat.max, height: height), + options: .UsesLineFragmentOrigin, + attributes: attributes, + context: nil).size.width + } } From 50e0a8ebebfb1817df497e542d9c06106ba45324 Mon Sep 17 00:00:00 2001 From: Alexey Gerasimov Date: Fri, 17 Jun 2016 18:39:42 +0300 Subject: [PATCH 2/2] Moved to one universal function --- .../NSString/NSString+SizeCalculation.swift | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/LeadKit/LeadKit/Extensions/NSString/NSString+SizeCalculation.swift b/LeadKit/LeadKit/Extensions/NSString/NSString+SizeCalculation.swift index de2682b7..7321d879 100644 --- a/LeadKit/LeadKit/Extensions/NSString/NSString+SizeCalculation.swift +++ b/LeadKit/LeadKit/Extensions/NSString/NSString+SizeCalculation.swift @@ -79,18 +79,22 @@ extension NSString { } /** - method which calculates string width based on given height and character attributes + method which calculates text size based on given character attributes - - parameter height: maximum height of string + - parameter width: maximum width of text + - parameter height: maximum height of text - parameter attributes: dictionary with string character attributes - - returns: string width + - returns: text size */ - public func widthWith(height height: CGFloat, attributes: [String: AnyObject]?) -> CGFloat { - return self.boundingRectWithSize(CGSize(width: CGFloat.max, height: height), + public func sizeWith(maxWidth width: CGFloat = CGFloat.max, + maxHeight height: CGFloat = CGFloat.max, + attributes: [String: AnyObject]?) -> CGSize { + + return self.boundingRectWithSize(CGSize(width: width, height: height), options: .UsesLineFragmentOrigin, attributes: attributes, - context: nil).size.width + context: nil).size } - + }