way*_*neh 143 iphone objective-c uilabel ios
是否可以自动调整UILabel框/边界的大小以适应包含的文本?(我不在乎它是否比显示器大)
因此,如果用户输入"你好"或"我的名字真的很长,我希望它适合这个盒子",它永远不会被截断,标签会相应地"加宽"吗?
Dan*_*iel 97
请查看我的要点,我已经UILabel为类似的东西制作了一个类别,我的类别让UILabel我们的高度显示所有内容:https: //gist.github.com/1005520
或者看看这篇文章:https://stackoverflow.com/a/7242981/662605
这会拉伸高度,但你可以轻松地改变它,以另一种方式工作,并用这样的东西拉伸宽度,这是我相信你想要做的:
@implementation UILabel (dynamicSizeMeWidth)
- (void)resizeToStretch{
float width = [self expectedWidth];
CGRect newFrame = [self frame];
newFrame.size.width = width;
[self setFrame:newFrame];
}
- (float)expectedWidth{
[self setNumberOfLines:1];
CGSize maximumLabelSize = CGSizeMake(CGRectGetWidth(self.bounds), CGFLOAT_MAX);
CGSize expectedLabelSize = [[self text] sizeWithFont:[self font]
constrainedToSize:maximumLabelSize
lineBreakMode:[self lineBreakMode]];
return expectedLabelSize.width;
}
@end
Run Code Online (Sandbox Code Playgroud)
您可以更简单地使用类中sizeToFit可用的方法UIView,但将行数设置为1是安全的.
如果您使用的是AutoLayout,那么您就拥有了内置的解决方案.通过将行数设置为0,框架将适当调整标签大小(添加更多高度)以适合您的文本.
sizeWithFont:已弃用,请sizeWithAttributes:改用:
- (float)expectedWidth{
[self setNumberOfLines:1];
CGSize expectedLabelSize = [[self text] sizeWithAttributes:@{NSFontAttributeName:self.font}];
return expectedLabelSize.width;
}
Run Code Online (Sandbox Code Playgroud)
Gui*_*tro 75
使用[label sizeToFit];将达到丹尼尔斯类别相同的结果.
虽然我建议使用autolayout并让标签根据约束调整自身大小.
Yog*_*har 33
如果我们想要UILabel根据文本大小缩小和扩展,那么具有自动布局的故事板是最佳选择.以下是实现此目的的步骤
将UILabel放入视图控制器并将其放在任何您想要的位置.也0适用numberOfLines于UILabel.
给它顶部,前导和尾随空间引脚约束.

Update Frame并单击Fix Misplacement.现在,如果文本较少,此UILabel将缩小,如果文本较多,则会展开.Sur*_*gch 22
这并不像其他一些答案那样复杂.
只需使用自动布局添加约束来固定标签的左侧和顶侧.
之后它会自动调整大小.
sizeToFit使用自动布局时无需设置.我的示例项目的完整代码在这里:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var myLabel: UILabel!
@IBAction func changeTextButtonTapped(sender: UIButton) {
myLabel.text = "my name is really long i want it to fit in this box"
}
}
Run Code Online (Sandbox Code Playgroud)myLabel.preferredMaxLayoutWidth = 150 // or whatever代码.(我还将我的按钮固定在标签的底部,这样当标签高度增加时它会向下移动.)UITableViewCell请参阅此答案.这是我发现适合我的情况的内容:
1) UILabel 的高度有一个 >= 0 使用自动布局的约束。宽度是固定的。2)将文本分配到 UILabel 中,此时它已经有一个超级视图(不确定这有多重要)。3)然后,执行:
label.sizeToFit()
label.layoutIfNeeded()
Run Code Online (Sandbox Code Playgroud)
标签的高度现在已适当设置。
小智 5
我在上面根据Daniel的回复创建了一些方法.
-(CGFloat)heightForLabel:(UILabel *)label withText:(NSString *)text
{
CGSize maximumLabelSize = CGSizeMake(290, FLT_MAX);
CGSize expectedLabelSize = [text sizeWithFont:label.font
constrainedToSize:maximumLabelSize
lineBreakMode:label.lineBreakMode];
return expectedLabelSize.height;
}
-(void)resizeHeightToFitForLabel:(UILabel *)label
{
CGRect newFrame = label.frame;
newFrame.size.height = [self heightForLabel:label withText:label.text];
label.frame = newFrame;
}
-(void)resizeHeightToFitForLabel:(UILabel *)label withText:(NSString *)text
{
label.text = text;
[self resizeHeightToFitForLabel:label];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
230008 次 |
| 最近记录: |