1234567891011121314151617181920212223242526272829303132333435363738 |
- //
- // String+BoundingRect.swift
- // SwiftBilibili
- //
- // Created by 罗文 on 2021/1/13.
- // Copyright © 2021年 罗文. All rights reserved.
- //
- import UIKit
- extension String {
-
- func boundingRect(with size: CGSize, attributes: [NSAttributedString.Key: Any]) -> CGRect {
- let options: NSStringDrawingOptions = [.usesLineFragmentOrigin, .usesFontLeading]
- let rect = self.boundingRect(with: size, options: options, attributes: attributes, context: nil)
- return snap(rect)
- }
-
- func size(thatFits size: CGSize, font: UIFont, maximumNumberOfLines: Int = 0) -> CGSize {
- let attributes: [NSAttributedString.Key: Any] = [.font: font]
- var size = self.boundingRect(with: size, attributes: attributes).size
- if maximumNumberOfLines > 0 {
- size.height = min(size.height, CGFloat(maximumNumberOfLines) * font.lineHeight)
- }
- return size
- }
-
- func width(with font: UIFont, maximumNumberOfLines: Int = 0) -> CGFloat {
- let size = CGSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude)
- return self.size(thatFits: size, font: font, maximumNumberOfLines: maximumNumberOfLines).width
- }
-
- func height(thatFitsWidth width: CGFloat, font: UIFont, maximumNumberOfLines: Int = 0) -> CGFloat {
- let size = CGSize(width: width, height: CGFloat.greatestFiniteMagnitude)
- return self.size(thatFits: size, font: font, maximumNumberOfLines: maximumNumberOfLines).height
- }
-
- }
|