如何获得基于字符串长度的CGFloat/CGSize?
问题描述:
我有一个UIView,它充当一个容器,并且此容器的宽度需要根据最长的字符串动态更改。所以我想根据字符串长度得到CGFloat/CGSize,它仍然有可能吗?如何获得基于字符串长度的CGFloat/CGSize?
这似乎是最有帮助的现在贬值的方法...
myStringSize : CGSize = [longestString sizeWithFont:myFont
constrainedToSize:maximumSize
lineBreakMode:self.myLabel.lineBreakMode];
而不是其基础上的标签上,我想将它基于一个String
答
感谢您的帮助@Venkat,这是工作的解决方案编辑我
@objc func containerWidth() -> (CGFloat){
let containerSize = self.myLabel.intrinsicContentSize
containerWidth = containerSize.width
return containerWidth
}
答
你必须给已知宽度或身高:
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- *这是如何获得的paraRect
从text
:
CGRect paraRect = [text boundingRectWithSize:constraint options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) attributes:attributes context:nil];
4- *最后得到尺寸:
CGSize size = paraRect.size;
的可能的复制【如何基于文本的长度计算的UILabel宽?](https://*.com/questions/3527494/how-to-calculate-uilabel-width-based-on -text-length) – Venkat
@Venkat谢谢你的链接,不幸的是它是从7年前,这就是为什么现在方法折旧:( – Maja
检查该链接中的所有答案。希望这会帮助你 。 'yourLabel.intrinsicContentSize.width'。 7年的老答案也可以给你的解决方案('boundingRect'):第 – Venkat