1. 程式人生 > 其它 >iOS - 計算給定文字佔用區域大小

iOS - 計算給定文字佔用區域大小

我們有時候可能會要顯示一段文字,就如微信中的聊天,聊天的內容是不固定的,可能多,也可能少。也就是說,我們在展示內容的時候,大小不固定,而我們要想展示完全的內容,就需要動態的計算出剛好適合內容大小的區域。

為此,封裝一個方法,用來計算合適的區域大小,程式碼如下:

//
//  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 高度 static
let 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) } }