我在过去的 QA 中搜索过解决方案,但找不到合适的解决方案。
有谁知道如何UILabel
动态调整大小以适应文本长度?
我已经上传了我不想要的(第一行)和我想要的(第二行)的屏幕截图。
我将不胜感激任何线索、建议或代码示例。谢谢你。
问问题
45296 次
8 回答
13
您正在搜索的是 UILabel 方法sizeToFit
我可以尝试向您解释,但了解如何使用 UILabel 的最佳答案是:https ://stackoverflow.com/a/1054681/666479
于 2013-06-01T01:57:24.463 回答
6
Xcode 8 和 iOS 10
使用自动布局很容易做到这一点。无需在代码中做任何事情。
使用自动布局
使用自动布局仅固定每个标签的顶部和左侧边缘。不要为宽度和高度添加约束。视图的内在内容大小将负责这一点。
以下是约束的样子:
代码
代码没有什么特别之处。无需使用sizeToFit
或类似的东西。
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var labelOne: UILabel!
@IBOutlet weak var labelTwo: UILabel!
@IBOutlet weak var labelThree: UILabel!
@IBAction func changeTextButtonTapped(_ sender: UIButton) {
labelOne.text = "David"
labelTwo.text = "met"
labelThree.text = "her"
}
}
笔记
于 2016-04-01T06:24:29.420 回答
3
使用这个扩展UILabel
类:
//
// UILabelExtended.h
//
// Created by Prateek on 6/18/11.
#import <Foundation/Foundation.h>
/* **********************************************************************************************
This class inherit the class UILabel and extend the features of UILabel.
********************************************************************************************** */
@interface UILabelExtended : UILabel {
__unsafe_unretained id customDelegate;
id objectInfo;
SEL selector;
}
@property (nonatomic,assign) SEL selector;;
@property (nonatomic,assign) id customDelegate;
@property (nonatomic,retain) id objectInfo;
@end
@interface UILabel(UILabelCategory)
- (void)setHeightOfLabel;
- (void)setWidthOfLabel;
- (void)setHeightOfLabelWithMaxHeight:(float)maxHeight;
- (void)setWidthOfLabelWithMaxWidth:(float)maxWidth ;
@end
UILabelExtended.m
//
// Created by Prateek on 6/18/11.
//
#import "UILabelExtended.h"
@implementation UILabelExtended
@synthesize selector,customDelegate, objectInfo;
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
if(self.selector)
if([self.customDelegate respondsToSelector:self.selector]) {
[self.customDelegate performSelector:self.selector withObject:self];
return;
}
}
- (void)dealloc {
self.customDelegate = nil;
self.selector = NULL;
self.objectInfo = nil;
}
@end
@implementation UILabel(UILabelCategory)
- (void)setHeightOfLabel {
UILabel* label = self;
//get the height of label content
CGFloat height = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(label.bounds.size.width, 99999) lineBreakMode:NSLineBreakByWordWrapping].height;
//set the frame according to calculated height
CGRect frame = label.frame;
if([label.text length] > 0) {
frame.size.height = height;
}
else {
frame.size.height = 0;
}
label.frame = frame;
}
- (void)setWidthOfLabel {
UILabel* label = self;
//get the height of label content
CGFloat width = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(99999, label.bounds.size.height) lineBreakMode:NSLineBreakByWordWrapping].width;
//set the frame according to calculated height
CGRect frame = label.frame;
if([label.text length] > 0) {
frame.size.width = width+5;
}
else {
frame.size.width = 0;
}
label.frame = frame;
}
- (void)setHeightOfLabelWithMaxHeight:(float)maxHeight {
UILabel* label = self;
//get the height of label content
CGFloat height = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(label.bounds.size.width, maxHeight) lineBreakMode:NSLineBreakByWordWrapping].height;
//set the frame according to calculated height
CGRect frame = label.frame;
if([label.text length] > 0) {
if (height > maxHeight) {
frame.size.height = maxHeight;
}
else {
frame.size.height = height;
}
}
else {
frame.size.height = 0;
}
label.frame = frame;
}
- (void)setWidthOfLabelWithMaxWidth:(float)maxWidth {
UILabel* label = self;
//get the height of label content
CGFloat width = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(99999, label.bounds.size.height) lineBreakMode:NSLineBreakByWordWrapping].width;
//set the frame according to calculated height
CGRect frame = label.frame;
if([label.text length] > 0) {
if (width > maxWidth) {
frame.size.width = maxWidth;
}
else {
frame.size.width = width;
}
}
else {
frame.size.width = 0;
}
label.frame = frame;
}
@end
使用方法: 1) 设置文本
UILabel
2)[yourLBLObj setHeightOfLabel];
或者[yourLBLObj setWidthOfLabel];
它会根据文本自动设置高度或宽度。
于 2013-06-01T04:50:21.797 回答
3
你可以简单地计算UILabel
字符串大小的宽度,试试这个简单的代码来设置UILabel
大小
// Single line, no wrapping;
CGSize expectedLabelSize = [string sizeWithFont:yourFont];
// you get width,height in expectedLabelSize;
//expectedLabelSize.width,expectedLabelSize.height
于 2013-06-01T05:00:24.880 回答
1
尝试这个
NSString *text1 = [NSString stringWithFormat:@"%@",commentText];
CGSize constraint1 = CGSizeMake(280, 2000);
CGSize size1 = [text1 sizeWithFont:[UIFont systemFontOfSize:12] constrainedToSize:constraint1 lineBreakMode:UILineBreakModeWordWrap];
UILabel *lblComment = [[UILabel alloc] initWithFrame:CGRectMake(posx,posy,size1.width,size1.height)] ;
lblComment.lineBreakMode = UILineBreakModeWordWrap;
lblComment.numberOfLines = size1.height/15;
[lblComment setFont:[UIFont systemFontOfSize:12]];
lblComment.text = text1;
lblComment.tag = shareObjC.userId;
[lblComment setNeedsDisplay]
于 2013-06-01T07:06:16.930 回答
0
您可以使用这段代码来计算标签宽度并设置它
CGSize expectedLabelSize = [name sizeWithFont:yourfont constrainedToSize:maximumLabelSize];
// 您可以从 expectedLabelSize 中获取宽度宽度高度并进行相应设置
于 2013-06-01T04:48:15.430 回答
0
只需输入 2 行代码
lbl1.numberOfLines = 0
lbl1.sizeToFit()
它将根据其内容管理标签宽度
希望它可以帮助别人:)
于 2018-05-21T19:02:20.803 回答