当前位置:  开发笔记 > 编程语言 > 正文

调整UILabel以适应?

如何解决《调整UILabel以适应?》经验,为你挑选了4个好方法。

如何从iPhone Developer's Cookbook第6章中的"09a-PrefsTable"配方修改以下片段(在tableView:cellForRowAtIndexPath:UITableViewController方法中):

if (row == 1) { 
    // Create a big word-wrapped UILabel 
    cell = [tableView dequeueReusableCellWithIdentifier:@"libertyCell"]; 
    if (!cell) { 
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"libertyCell"] autorelease]; 
        [cell addSubview:[[UILabel alloc] initWithFrame:CGRectMake(20.0f, 10.0f, 280.0f, 330.0f)]]; 
    } 
    UILabel *sv = [[cell subviews] lastObject]; 
    sv.text =  @"When in the Course of human events, it becomes necessary for one people to dissolve the political bands which have connected them with another, and to assume among the powers of the earth, the separate and equal station to which the Laws of Nature and of Nature's God entitle them, a decent respect to the opinions of mankind requires that they should declare the causes which impel them to the separation."; 
    sv.textAlignment = UITextAlignmentCenter; 
    sv.lineBreakMode = UILineBreakModeWordWrap; 
    sv.numberOfLines = 9999; 
    return cell; 
} 

...调整"sv"UILabel子视图和"单元格"UITableViewCell的大小,使其大小足以适应文本(并使用或多或少的文本以及其他类型的文本对齐)?我查看了UILabel textRectForBounds:limitedToNumberOfLines:方法,但是文档声明它不应该直接调用(并且只应该被覆盖).我尝试使用UIView sizeToFit方法,但没有成功.

更新: 我用NSString -sizeWithFont:forWidth:lineBreakMode:method问了一个关于我的问题的新问题.



1> BadPirate..:

我必须这样做,我扩展UILabel为我做这件事:

@interface UILabel (BPExtensions)
- (void)sizeToFitFixedWidth:(CGFloat)fixedWidth;
@end

@implementation UILabel (BPExtensions)


- (void)sizeToFitFixedWidth:(CGFloat)fixedWidth
{
    self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, fixedWidth, 0);
    self.lineBreakMode = NSLineBreakByWordWrapping;
    self.numberOfLines = 0;
    [self sizeToFit];
}
@end

然后让标签具有可变的多线高度,但只有一个固定的宽度:

[myLabel sizeToFitFixedWidth:kSomeFixedWidth];


魔法.将帧的高度设置为0 - 然后调用[self sizeToFit]; 谢谢.

2> Lily Ballard..:

您应该使用NSString的-sizeWithFont:forWidth:lineBreakMode:方法来检索标签的关联大小调整指标.


在swift中,您应该使用`sizeWithAttributes`方法

3> Sophie Alper..:

此外,如果您要使用该代码,请将numberOfLines属性更改为0.



4> pix0r..:

NSString-sizeWithFont:forWidth:lineBreakMode:实际上并不执行自动换行.相反,用于-sizeWithFont:constrainedToSize:lineBreakMode:获取字符串的准确宽度和高度值.

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有