Sum*_*rya 23 iphone objective-c ios ios6 ios7
我正在使用此方法动态获取UILabel的高度:
+(CGSize) GetSizeOfLabelForGivenText:(UILabel*)label Font:(UIFont*)fontForLabel Size: (CGSize)LabelSize{
label.numberOfLines = 0;
CGSize labelSize = [label.text sizeWithFont:fontForLabel constrainedToSize:LabelSize lineBreakMode:NSLineBreakByCharWrapping];
return (labelSize);
}
Run Code Online (Sandbox Code Playgroud)
使用此解决方案,如果我的代码在iOS 8下运行,我将获得UILabel的确切大小,但如果我在iOS7上运行我的应用程序,则返回不同的值.
pre*_*tam 26
您必须动态设置框架,如下所示:
let constrainedSize = CGSize(width: self.titleLable.frame.size.width, height:9999)
let attributesDictionary = [NSAttributedString.Key.font: UIFont.init(name: "HelveticaNeue", size: 11.0)]
let string = NSAttributedString.init(string: "textToShow", attributes: attributesDictionary as [NSAttributedString.Key : Any])
var requiredHeight = string.boundingRect(with: constrainedSize, options: .usesLineFragmentOrigin, context: nil)
if (requiredHeight.size.width > self.titleLable.frame.size.width) {
requiredHeight = CGRect(x: 0, y: 0, width: self.titleLable.frame.size.width, height: requiredHeight.size.height)
}
var newFrame = self.titleLable.frame
newFrame.size.height = requiredHeight.size.height
self.titleLable.frame = newFrame
Run Code Online (Sandbox Code Playgroud)
这是宽度和高度的完整解决方案.把它们放在AppDelegate中:
+(void)fixHeightOfThisLabel:(UILabel *)aLabel
{
aLabel.frame = CGRectMake(aLabel.frame.origin.x,
aLabel.frame.origin.y,
aLabel.frame.size.width,
[AppDelegate heightOfTextForString:aLabel.text
andFont:aLabel.font
maxSize:CGSizeMake(aLabel.frame.size.width, MAXFLOAT)]);
}
+(CGFloat)heightOfTextForString:(NSString *)aString andFont:(UIFont *)aFont maxSize:(CGSize)aSize
{
// iOS7
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
{
CGSize sizeOfText = [aString boundingRectWithSize: aSize
options: (NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
attributes: [NSDictionary dictionaryWithObject:aFont
forKey:NSFontAttributeName]
context: nil].size;
return ceilf(sizeOfText.height);
}
// iOS6
CGSize textSize = [aString sizeWithFont:aFont
constrainedToSize:aSize
lineBreakMode:NSLineBreakByWordWrapping];
return ceilf(textSize.height;
}
+(void)fixWidthOfThisLabel:(UILabel *)aLabel
{
aLabel.frame = CGRectMake(aLabel.frame.origin.x,
aLabel.frame.origin.y,
[AppDelegate widthOfTextForString:aLabel.text
andFont:aLabel.font
maxSize:CGSizeMake(MAXFLOAT, aLabel.frame.size.height)],
aLabel.frame.size.height);
}
+(CGFloat)widthOfTextForString:(NSString *)aString andFont:(UIFont *)aFont maxSize:(CGSize)aSize
{
// iOS7
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
{
CGSize sizeOfText = [aString boundingRectWithSize: aSize
options: (NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
attributes: [NSDictionary dictionaryWithObject:aFont
forKey:NSFontAttributeName]
context: nil].size;
return ceilf(sizeOfText.width);
}
// iOS6
CGSize textSize = [aString sizeWithFont:aFont
constrainedToSize:aSize
lineBreakMode:NSLineBreakByWordWrapping];
return ceilf(textSize.width);
}
Run Code Online (Sandbox Code Playgroud)
然后使用它,设置标签的文本:
label.numberOfLines = 0;
label.text = @"Everyone loves Stack OverFlow";
Run Code Online (Sandbox Code Playgroud)
并致电:
[AppDelegate fixHeightOfThisLabel:label];
Run Code Online (Sandbox Code Playgroud)
注意:标签的numberOfLines必须设置为0.希望有所帮助.
| 归档时间: |
|
| 查看次数: |
46859 次 |
| 最近记录: |