iOS - 計算給定文字佔用區域大小
阿新 • • 發佈:2022-03-16
我們有時候可能會要顯示一段文字,就如微信中的聊天,聊天的內容是不固定的,可能多,也可能少。也就是說,我們在展示內容的時候,大小不固定,而我們要想展示完全的內容,就需要動態的計算出剛好適合內容大小的區域。
為此,封裝一個方法,用來計算合適的區域大小,程式碼如下:
// // SystemInfoTools.swift // SwiftTools // // Created by huang zhengguo on 2017/10/26. // Copyright © 2017年 Huang. All rights reserved. // import UIKit class SystemInfo { // 螢幕寬度static let screenWidth: CGFloat = UIScreen.main.bounds.size.width // 螢幕高度 static let screenHeight: CGFloat = UIScreen.main.bounds.size.height // 狀態列高度 static let tatusBarHeight: CGFloat = UIApplication.shared.statusBarFrame.size.height // 如果是 iPhone 底部帶有 home Bar 高度 staticlet homeBarHeight: CGFloat = 34.0 }
程式碼中用到了上面的一些常量定義
// // FrameTool.swift //// // Created by mac min on 2021/11/30. // Copyright © 2021 zhengguohuang. All rights reserved. // import Foundation public class FrameTool { /** * * 計算文字所佔區域大小 * * @param str 文字字串 * @param width 預設寬度 * @param verticalPadding 垂直方向內邊距 * @param verticalPadding 垂直方向內邊距*/ static func calculateStrFitSize(str: String, width: CGFloat = SystemInfo.screenWidth * 4.0 / 5.0, verticalPadding: Double = 180, horizontalPadding: Double = 0) -> CGRect { let sizeLabel = UILabel(frame: .zero) sizeLabel.numberOfLines = 0 sizeLabel.text = str let maxWidth = 500.0 let maxHeight = 1000.0 let fitWidth = width let messageLabelSize = sizeLabel.sizeThatFits(CGSize(width: fitWidth, height: Double(MAXFLOAT))) let width = min(maxWidth, fitWidth) let height = min(maxHeight, messageLabelSize.height) return CGRect(x: (SystemInfo.screenWidth - (width + horizontalPadding)) / 2.0, y: SystemInfo.screenHeight / 2.0 - 225.0, width: width + horizontalPadding, height: height + verticalPadding) } }