源代码来自: http://www.cnblogs.com/YouXianMing/p/5823893.html,但是在当前Xcode(8.3) swift版本下已经不兼容了,改造后的代码如下:
//
// String+StringHeight.swift
// StringHeight
//
// Created by YouXianMing on 16/8/30.
// Upgraded By Stone on 2017-6-15
// Copyright © 2016年 YouXianMing. All rights reserved.
//
import Foundation
import UIKit
extension String {
/**
Get the height with the string.
- parameter attributes: The string attributes.
- parameter fixedWidth: The fixed width.
- returns: The height.
*/
func heightWithStringAttributes(attributes : [String : AnyObject], fixedWidth : CGFloat) -> CGFloat {
guard self.characters.count > 0 && fixedWidth > 0 else {
return 0
}
let size = CGSize(width:fixedWidth, height:CGFloat.greatestFiniteMagnitude)
let text = self as NSString
let rect = text.boundingRect(with: size, options:.usesLineFragmentOrigin, attributes: attributes, context:nil)
return rect.size.height
}
/**
Get the height with font.
- parameter font: The font.
- parameter fixedWidth: The fixed width.
- returns: The height.
*/
func heightWithFont(font : UIFont = UIFont.systemFont(ofSize: 18), fixedWidth : CGFloat) -> CGFloat {
guard self.characters.count > 0 && fixedWidth > 0 else {
return 0
}
let size = CGSize(width:fixedWidth, height:CGFloat.greatestFiniteMagnitude)
let text = self as NSString
let rect = text.boundingRect(with: size, options:.usesLineFragmentOrigin, attributes: [NSFontAttributeName : font], context:nil)
return rect.size.height
}
/**
Get the width with the string.
- parameter attributes: The string attributes.
- returns: The width.
*/
func widthWithStringAttributes(attributes : [String : AnyObject]) -> CGFloat {
guard self.characters.count > 0 else {
return 0
}
let size = CGSize(width:CGFloat.greatestFiniteMagnitude, height:0)
let text = self as NSString
let rect = text.boundingRect(with: size, options:.usesLineFragmentOrigin, attributes: attributes, context:nil)
return rect.size.width
}
/**
Get the width with the string.
- parameter font: The font.
- returns: The string's width.
*/
func widthWithFont(font : UIFont = UIFont.systemFont(ofSize: 18)) -> CGFloat {
guard self.characters.count > 0 else {
return 0
}
let size = CGSize(width:CGFloat.greatestFiniteMagnitude, height:0)
let text = self as NSString
let rect = text.boundingRect(with: size, options:.usesLineFragmentOrigin, attributes: [NSFontAttributeName : font], context:nil)
return rect.size.width
}
}