根据UILabel字体大小调整CGSize

时间:2015-09-09 11:51:13

标签: ios objective-c

我得到的CGSize高度比标签字体长。 我想删除文本和UILabel边缘之间的顶部/左/右/底部填充,以便UILabel框架适合它包含的文本。

这是我正在使用的代码......

NSString *ad=@"hello"; 
NSDictionary *fontAttributes = @{NSFontAttributeName : [UIFont systemFontOfSize:50]}; 
CGSize textSize = [ad sizeWithAttributes:fontAttributes]; 
bc =[[UILabel alloc]initWithFrame:CGRectMake(20, 25, textSize.width, textSize.height)]; 
bc.font= [UIFont systemFontOfSize:50]; 
bc.text=ad; 
bc.layer.borderColor = [UIColor blackColor].CGColor; 
bc.layer.borderWidth = 1.0; 

[self.tap addSubview:bc];

3 个答案:

答案 0 :(得分:1)

您无需让CGSize textSize分配UILabel

在标签中使用自动布局:

  1. 在xib中添加标签top,leading,trailing约束。
  2. numberOfLines属性设置为0
  3. 在VC中设置preferredMaxLayout宽度(如果您的开发目标< iOS8)
  4. 设置您想要的任何文字。

答案 1 :(得分:0)

如果已在视图中拖动它,可以通过设置sizeToFitContent的属性来执行此操作。以编程方式,您可以尝试sizeToFit。

答案 2 :(得分:0)

试试这个:

    NSString *mytext = @"some random text";
    UILabel *someLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 100, 280, 100)];
    someLabel.text = mytext;
    someLabel.backgroundColor = [UIColor clearColor];
    someLabel.lineBreakMode = NSLineBreakByWordWrapping;
    [self.view addSubview:someLabel];

    // For single line
    someLabel.numberOfLines = 1;
    someLabel.minimumScaleFactor = 8;
    someLabel.adjustsFontSizeToFitWidth = YES;

    // For multiple lines
    someLabel.numberOfLines = 0;
    someLabel.lineBreakMode = NSLineBreakByWordWrapping;
    CGSize maximumLabelSize = CGSizeMake(someLabel.frame.size.width, CGFLOAT_MAX);
    CGSize expectSize = [someLabel sizeThatFits:maximumLabelSize];
    someLabel.frame = CGRectMake(someLabel.frame.origin.x, someLabel.frame.origin.y, expectSize.width, expectSize.height);