[英]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.