簡體   English   中英

如何基於字符串長度獲取CGFloat / CGSize?

[英]How to get CGFloat/CGSize based on String length?

我有一個UIView,它充當容器,並且該容器的寬度需要根據最長的String動態更改。 所以我想基於字符串長度獲取CGFloat / CGSize,這仍然可能嗎?

似乎最有用的方法現已折舊...

myStringSize : CGSize  = [longestString sizeWithFont:myFont 
                       constrainedToSize:maximumSize 
                       lineBreakMode:self.myLabel.lineBreakMode];

與其將其基於標簽,不如將其基於字符串

您必須提供已知寬度或高度:

extension String {

    func getHeight(with width: CGFloat, font: UIFont) -> CGFloat {
        let maxSize = CGSize(width: width, height: CGFloat.greatestFiniteMagnitude)
        let actualSize = self.boundingRect(with: maxSize, options: [.usesLineFragmentOrigin], attributes: [NSFontAttributeName: font], context: nil)
        return actualSize.height
    }


    func getWidth(with height: CGFloat, font: UIFont) -> CGFloat {
        let maxSize = CGSize(width: CGFloat.greatestFiniteMagnitude, height: height)
        let actualSize = self.boundingRect(with: maxSize, options: [.usesLineFragmentOrigin], attributes: [NSFontAttributeName: font], context: nil)
        return actualSize.width
    }
}

1 -首先定義所需的最大尺寸MaxWidth

 CGSize constraint = CGSizeMake(MaxWidth, CGFLOAT_MAX);

2-您的text屬性:

NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys: [UIFont systemFontOfSize:FONT_SIZE], NSFontAttributeName, nil];

3- *這是如何從text獲取paraRect

CGRect paraRect = [text boundingRectWithSize:constraint options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) attributes:attributes context:nil];

4- *最終確定尺寸:

CGSize size = paraRect.size;

感謝您的幫助@Venkat,這是為我工作的解決方案

 @objc func containerWidth() -> (CGFloat){
        let containerSize = self.myLabel.intrinsicContentSize
        containerWidth = containerSize.width
        return containerWidth
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM