如何用文本动态打破 UILabel 的行?
How to break line of a UILabel dynamically with text?
我有一个 UILabel,我想在此标签中显示一些文本。我想将标签宽度最多增加到设备全屏的 70%。如果该标签的文本长度不适合这 70% 的大小,那么只要文本长度,标签就会自动转到下一行。每当标签长度超过主屏幕宽度的 70% 时,线条也会断开。我尝试了几种方法,但仍无法解决。请帮我解决这个问题。
提前致谢;
将标签拖到您的情节提要中并向其添加顶部和前导约束。
现在 select 将标签和控件拖动到包含标签的视图(在您的 ViewController 视图中)您将看到弹出窗口,然后 select 等宽
现在您的标签宽度等于视图的宽度 :) 这不是您想要的,您希望标签宽度占视图的 70%。所以select label 的相等约束,转到属性 inspector 并将乘数更改为0.7
现在您的标签宽度是视图的 70%!
但您不希望它总是 70%。它最多可以占屏幕的 70%,所以
现在改变约束关系从等于小于等于。
select 标签并将行数更改为 0。
就是这样 :) 玩得开心 :)
样本O/P:
文本较短与较长时:
- - -
编辑:
不使用故事板?没问题;以编程方式编写相同的约束并将其应用于足够简单的标签。如果您需要帮助,请告诉我:)
编辑:
由于您已指定要在标签中每行的开头留下间隙,您可以使用边缘插入来实现它
- (void)drawTextInRect:(CGRect)rect {
UIEdgeInsets insets = {0, 5, 0, 0};
[super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)];
}
您一定是忘记增加标签的高度了。
下面的代码用于允许 UILabel 具有多行:
label.numberOfLines = 0;
label.lineBreakMode = NSLineBreakByWordWrapping;
然后你必须确保 UILabel 的框架有足够的高度来显示线条。您可以通过计算给定文本 (NSString) 所需的高度来实现此目的:
NSString *text = @"YourText";
CGFloat your70Width; // whatever your width is
CGSize constraintSize = CGSizeMake(your70Width, MAXFLOAT);
UIFont *yourLabelFont; // whatever your font is
CGRect requiredFrame = [text boundingRectWithSize:constraintSize options:NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:yourLabelFont} context:nil];
// Keeps the old x,y coordinates and replaces only the width and height.
CGRect oldLabelFrame = label.frame;
label.frame = CGRectMake(oldLabelFrame.origin.x, oldLabelFrame.origin.y, requiredFrame.size.width, requiredFrame.size.height);
现在标签可以多行显示了。
如果使用故事板,根据内容增加标签的高度。给标签四个约束(顶部、底部、前导、尾随)然后转到属性检查器并将行设置为 0 并在换行符中执行 WORD WRAP。
我有一个 UILabel,我想在此标签中显示一些文本。我想将标签宽度最多增加到设备全屏的 70%。如果该标签的文本长度不适合这 70% 的大小,那么只要文本长度,标签就会自动转到下一行。每当标签长度超过主屏幕宽度的 70% 时,线条也会断开。我尝试了几种方法,但仍无法解决。请帮我解决这个问题。
提前致谢;
将标签拖到您的情节提要中并向其添加顶部和前导约束。
现在 select 将标签和控件拖动到包含标签的视图(在您的 ViewController 视图中)您将看到弹出窗口,然后 select 等宽
现在您的标签宽度等于视图的宽度 :) 这不是您想要的,您希望标签宽度占视图的 70%。所以select label 的相等约束,转到属性 inspector 并将乘数更改为0.7
现在您的标签宽度是视图的 70%!
但您不希望它总是 70%。它最多可以占屏幕的 70%,所以 现在改变约束关系从等于小于等于。
select 标签并将行数更改为 0。
就是这样 :) 玩得开心 :)
样本O/P:
文本较短与较长时:
编辑:
不使用故事板?没问题;以编程方式编写相同的约束并将其应用于足够简单的标签。如果您需要帮助,请告诉我:)
编辑:
由于您已指定要在标签中每行的开头留下间隙,您可以使用边缘插入来实现它
- (void)drawTextInRect:(CGRect)rect {
UIEdgeInsets insets = {0, 5, 0, 0};
[super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)];
}
您一定是忘记增加标签的高度了。 下面的代码用于允许 UILabel 具有多行:
label.numberOfLines = 0;
label.lineBreakMode = NSLineBreakByWordWrapping;
然后你必须确保 UILabel 的框架有足够的高度来显示线条。您可以通过计算给定文本 (NSString) 所需的高度来实现此目的:
NSString *text = @"YourText";
CGFloat your70Width; // whatever your width is
CGSize constraintSize = CGSizeMake(your70Width, MAXFLOAT);
UIFont *yourLabelFont; // whatever your font is
CGRect requiredFrame = [text boundingRectWithSize:constraintSize options:NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:yourLabelFont} context:nil];
// Keeps the old x,y coordinates and replaces only the width and height.
CGRect oldLabelFrame = label.frame;
label.frame = CGRectMake(oldLabelFrame.origin.x, oldLabelFrame.origin.y, requiredFrame.size.width, requiredFrame.size.height);
现在标签可以多行显示了。
如果使用故事板,根据内容增加标签的高度。给标签四个约束(顶部、底部、前导、尾随)然后转到属性检查器并将行设置为 0 并在换行符中执行 WORD WRAP。