Rob*_*udi 10 objective-c frame uilabel ios
我已经尝试了两天来修改a的框架UILabel,这是荒谬的...这UILabel是一个IBOutlet,但这不是它不工作的原因:我试图以UILabel编程方式创建它仍然无法正常工作.我是这样做的:
self.descriptionLabel.text = description;
self.descriptionLabel.lineBreakMode = NSLineBreakByWordWrapping;
CGSize textSize = [self.descriptionLabel.text sizeWithFont:[UIFont systemFontOfSize:12.0]
constrainedToSize:CGSizeMake(self.descriptionLabel.frame.size.width, FLT_MAX)
lineBreakMode:self.descriptionLabel.lineBreakMode];
CGFloat frameHeight = textSize.height;
CGRect frame = self.descriptionLabel.frame;
frame.size.height = frameHeight;
self.descriptionLabel.frame = frame;
CGRect bounds = self.descriptionLabel.frame;
bounds.origin.x = self.descriptionLabel.frame.origin.x + 10.0;
bounds.size.width = self.descriptionLabel.frame.size.width - 20.0;
self.descriptionLabel.bounds = bounds;
self.descriptionLabel.numberOfLines = 0;
Run Code Online (Sandbox Code Playgroud)
我已经在IRC问过了,他们告诉我没有理由不改变框架......
我也尝试创建一个框架,CGRectMake并赋予它任意值,但这也没有做到这一点..
有谁知道这可能是什么问题吗?
编辑1:我之前和之后记录了帧,我得到了奇怪的结果:
Before: 0.000000 0.000000 0.000000 0.000000
After: 0.000000 0.000000 0.000000 33525.000000
Run Code Online (Sandbox Code Playgroud)
设置框架后的高度是唯一有意义的值(我故意在标签中有很多文本).
编辑2:我按如下方式更改了代码,日志显示框架已更改,但在模拟器上它没有更改; 我通过在图层中添加红色边框来证明这一点UILabel.
self.descriptionLabel.text = description;
self.descriptionLabel.lineBreakMode = NSLineBreakByWordWrapping;
CGSize textSize = [self.descriptionLabel.text sizeWithFont:[UIFont systemFontOfSize:12.0]
constrainedToSize:CGSizeMake(self.view.frame.size.width, FLT_MAX)
lineBreakMode:self.descriptionLabel.lineBreakMode];
CGFloat frameHeight = textSize.height;
CGRect frame = CGRectMake(0.0, 300.0, self.view.frame.size.width, frameHeight);
self.descriptionLabel.frame = frame;
DDLogInfo(@"After: %f %f %f %f", self.descriptionLabel.frame.origin.x, self.descriptionLabel.frame.origin.y, self.descriptionLabel.frame.size.width, self.descriptionLabel.frame.size.height);
// After: 0.000000 300.000000 320.000000 585.000000
self.descriptionLabel.numberOfLines = 0;
self.descriptionLabel.layer.borderColor = [UIColor redColor].CGColor;
self.descriptionLabel.layer.borderWidth = 2;
Run Code Online (Sandbox Code Playgroud)

rde*_*mar 26
如果您使用的是自动布局,则不应进行任何帧设置 - 要么关闭自动布局,要么使用约束来更改标签的大小.最简单的方法是在IB中给你的标签一个高度约束(如果你想要一个恒定的宽度也宽度),并为它做一个IBOutlet.然后,在代码中,根据从sizeWithFont获得的值更改该约束的常量值:constrainedToSize:lineBreakMode:.