为啥此代码中需要“sizeToFit”调用?

Posted

技术标签:

【中文标题】为啥此代码中需要“sizeToFit”调用?【英文标题】:why is the "sizeToFit" call required in this code?为什么此代码中需要“sizeToFit”调用? 【发布时间】:2011-03-10 01:57:58 【问题描述】:

任何人都能够强调为什么下面的代码中需要“[aLabel sizeToFit]”行,取自here。

也就是说,创建的 CGRect 已经根据文本字体大小进行了调整,那为什么还需要 sizeToFit 呢?或者是因为虽然他们计算了正确的 CGRect 大小,但他们实际上还没有将预先约定的字体(系统字体)设置为 UILabel? (因此有效地称为 sizeToFit 而不是设置字体)

- (CGRect)RAD_frameForCellLabelWithSystemFontOfSize:(CGFloat)size 
    CGFloat width = [UIScreen mainScreen].bounds.size.width - 50;
    CGFloat height = [self RAD_textHeightForSystemFontOfSize:size] + 10.0;
    return CGRectMake(10.0f, 10.0f, width, height);


- (void)RAD_resizeLabel:(UILabel *)aLabel WithSystemFontOfSize:(CGFloat)size 
    aLabel.frame = [self RAD_frameForCellLabelWithSystemFontOfSize:size];
    aLabel.text = self;
    [aLabel sizeToFit];    // WHY IS THIS REQUIRED

【问题讨论】:

【参考方案1】:

来自文档:

当你想调用这个方法 调整当前视图的大小,使其 使用最合适的量 空间。特定的 UIKit 视图调整大小 自己根据自己 内部需求。在某些情况下,如果一个 视图没有超级视图,它可能 将自身调整到屏幕边界。 因此,如果您希望给定视图的大小 本身到它的父视图,你应该 之前将其添加到父视图 调用这个方法。

选择适合您情况的正确选项。

【讨论】:

但是 CGRect 的分配(已明确调整大小)实际上是在设置 UILabel 的大小(我知道 UILabel 实际上是 /a 视图),这不是真的吗?还是我在这里遗漏了什么? 是的,UILabel 是 UIView 的子类。忘记从文档中添加这个:调整并移动接收器视图,使其仅包含其子视图。因此,如果该标签具有子视图,那么这就是答案。但是,您可以确定:注释掉该行,看看会发生什么:) 好的 - 就目前而言,我认为你的意思是在这段代码中它可能真的没有必要(即可能什么都不做)? 我真的不知道(因为它是特定于应用程序的)。我刚刚列出了所有可能的原因。

以上是关于为啥此代码中需要“sizeToFit”调用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在尝试垂直对齐我的 UILabel 时 sizeToFit 不起作用?它只是停留在中心

UILabel sizeToFit 在 iOS 8 中崩溃

sizeToFit() 返回错误的高度 - 需要在 heightForRow 中查找单元格宽度

oAuth2.0:为啥需要“授权码”,然后才需要令牌?

UILabel 的 sizeToFit/sizeThatFits 忽略 numberoflines 属性

为啥此代码示例中需要 @Output EventEmitter?