我怎样才能得到 UILabel 的高度?
Posted
技术标签:
【中文标题】我怎样才能得到 UILabel 的高度?【英文标题】:how can i get the height of UILabel? 【发布时间】:2015-06-08 07:54:37 【问题描述】:大家好, 在这里,我从情节提要中获取了一个 UIView 和 UIScrollview 并从情节提要中设置了它的约束,并且我在 UIView 内以编程方式创建了一个 UILabel 并设置了它的约束。现在我的问题是如何获得 UILabel 的高度?所以根据它的高度我想计算 UIView 的高度,还需要设置滚动视图的内容大小。
这是我的代码
UIViewController.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@property(nonatomic, weak)IBOutlet UIScrollView *scrlview;
@property(nonatomic, weak) IBOutlet UIView *my_view;
@property(nonatomic, retain)IBOutlet NSLayoutConstraint *heightconstraint;
@property(nonatomic, strong) UILabel *lbl_title;
@end
UIViewController.m
@implementation ViewController
@synthesize scrlview,my_view,heightconstraint,lbl_title;
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.title=@"Demo";
NSString *text3 = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent non quam ac massa viverra semper. Maecenas mattis justo ac augue volutpat congue. Maecenas laoreet, nulla eu faucibus gravida, felis orci dictum risus, sed sodales sem eros eget risus. Morbi imperdiet sed diam et sodales. Vestibulum ut est id mauris ultrices gravida. Nulla malesuada metus ut erat malesuada, vitae ornare neque semper. Aenean a commodo justo, vel placerat odio. Curabitur vitae consequat tortor. Aenean eu magna ante. Integer tristique elit ac augue laoreet, eget pulvinar lacus dictum. Cras eleifend lacus eget pharetra elementum. Etiam fermentum eu felis eu tristique. Integer eu purus vitae turpis blandit consectetur. Nulla facilisi. Praesent bibendum massa eu metus pulvinar, quis tristique nunc commodo. Ut varius aliquam elit, a tincidunt elit aliquam non. Nunc ac leo purus. Proin condimentum placerat ligula, at tristique neque scelerisque ut. Suspendisse ut";
lbl_title = [[UILabel alloc]init];
[lbl_title setText:text3];
[lbl_title setFont:[UIFont fontWithName:@"Helvetica" size:15.0f]];
[lbl_title setBackgroundColor:[UIColor purpleColor]];
[lbl_title setTranslatesAutoresizingMaskIntoConstraints:FALSE];
lbl_title.numberOfLines=0;
[my_view addSubview:lbl_title];
[my_view addConstraint:[NSLayoutConstraint constraintWithItem:lbl_title
attribute:NSLayoutAttributeLeading
relatedBy:NSLayoutRelationEqual
toItem:my_view
attribute:NSLayoutAttributeLeading
multiplier:1.0
constant:10.0]];
[my_view addConstraint:[NSLayoutConstraint constraintWithItem:lbl_title
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:my_view
attribute:NSLayoutAttributeTop
multiplier:1.0
constant:10.0]];
[my_view addConstraint:[NSLayoutConstraint constraintWithItem:lbl_title
attribute:NSLayoutAttributeTrailing
relatedBy:NSLayoutRelationEqual
toItem:my_view
attribute:NSLayoutAttributeTrailing
multiplier:1.0
constant:-10.0]];
NSLog(@"height of label in viewdidload %f",lbl_title.frame.size.height);
-(void)viewDidLayoutSubviews
NSLog(@"height of label %f",lbl_title.frame.size.height);
[scrlview setContentSize:CGSizeMake(0, 2000)];
heightconstraint.constant=2000;
【问题讨论】:
在将文本分配给标签后使用[label sizeToFit];
,您的框架应该可以正常工作..
【参考方案1】:
如果你使用自动布局,那么你必须使用layoutIfNeeded
。获取所有SubView
的框架
[self.view layoutIfNeeded];
NSLog(@"height of label %f",lbl_title.frame.size.height);
【讨论】:
【参考方案2】:试试这个
label_getTextSize = [[UILabel alloc] initWithFrame:CGRectMake(12, 28, 296, 59)];
label_getTextSize.lineBreakMode = NSLineBreakByWordWrapping;
label_getTextSize.numberOfLines = 3;
CGSize labelSize = [label_getTextSize textHeigh:someText attributes:[self getTextStyle]];
=================
-(NSDictionary *) getTextStyle
UIFont * font = [UIFont fontWithName:@"font name" size:10];
float lineSpacing = 0.0f;
float kerling = 0.0f;
NSMutableParagraphStyle *paragrahStyle = [[NSMutableParagraphStyle alloc] init];
[paragrahStyle setLineSpacing:lineSpacing];
NSDictionary * textAttributes = @
NSFontAttributeName : font,
NSForegroundColorAttributeName : [UIColor whiteColor],
NSKernAttributeName : @(kerling),
NSParagraphStyleAttributeName : paragrahStyle
;
return textAttributes;
【讨论】:
Yuri 感谢您重播,但请先阅读我的问题...我正在使用 aulayout 约束。 label_getTextSize = [[UILabel alloc] initWithFrame:CGRectMake(XX,XX,lbl_title.frame.width,xx)]; XX - 任何值。【参考方案3】:您需要使用 UILabel lbl_title
的框架进行初始化。所以不要使用
lbl_title = [[UILabel alloc]init];
使用
lbl_title = [[UILabel alloc]initWithFrame:];
【讨论】:
以上是关于我怎样才能得到 UILabel 的高度?的主要内容,如果未能解决你的问题,请参考以下文章
为啥带有 UILabel 的嵌套 UIStackViews 需要 Y 位置和高度约束?
自动增加/减少 UITableViewCell 中的 UILabelView 高度?