ios - UILabel 文本多行给定文本宽度

标签 ios objective-c

我想按照 snapchat 的方式缩放 UILabel。我有一个文本字段,我可以在其中插入文本。当点击完成时,文本字段会出现并设置标签的文本。我想在文本大于屏幕宽度时插入多行并截断标签的框架以便文本适合。

这是我的代码

if(isCaption){
    //Begin Edit Text
    _textlabel.hidden = NO;
    _textlabel.text = currentText;
    _textFieldOutlet.hidden = YES;
    [_textFieldOutlet setTextAlignment:NSTextAlignmentLeft];
    [_textlabel setTextAlignment:NSTextAlignmentLeft];
    [self.screenShotView bringSubviewToFront:_textlabel];

    _textlabel.frame = CGRectMake(10,
                                  _textlabel.frame.origin.y,
                                  [currentText sizeWithAttributes:@{NSFontAttributeName:[_textlabel font]}].width,
                                  [currentText sizeWithAttributes:@{NSFontAttributeName:[_textlabel font]}].height);


    isEditing = YES;
    isCaption = NO;


}

问题是结果是一大行文本,我希望它分布在多行上。如何做到这一点?如何分隔给定宽度的线条?

最佳答案

如果您想要多行,则不应使用 sizeWithAttributes: 计算宽度。您应该固定标签的宽度,然后使用 boundingRectWithSize: 方法计算高度。

您可以创建一个辅助方法,如下所示:

- (CGSize)suggestedSizeWithFont:(UIFont *)font size:(CGSize)size lineBreakMode:(NSLineBreakMode)lineBreakMode forString:(NSString *)text {
      NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new];
      paragraphStyle.lineBreakMode = lineBreakMode;
      NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:text attributes:@{NSFontAttributeName: font,       NSParagraphStyleAttributeName: paragraphStyle}];
      CGRect bounds = [attributedString boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin context:nil];
      return bounds.size;
}

或者您可以创建一个类别并删除额外的文本参数。

然后您可以调用标签文本的方法,如下所示:

CGSize requiredSize = [self suggestedSizeWithFont:_textLabel.font size:CGSizeMake(self.view.frame.size.width, CGFLOAT_MAX) lineBreakMode:_textLabel.lineBreakMode forString:_textLabel.text];
_textLabel.frame = CGRectMake(0, _textlabel.frame.origin.y, requiredSize.width, requiredSize.height);

您可以将宽度设置为您希望标签适合的任何值。高度将相应计算。但记得将 numberOfLines 设置为 0。

关于ios - UILabel 文本多行给定文本宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31344787/

相关文章:

ios - 我将如何在 UIView Blink 上制作 4 个 UIImages 或基于 Timing 删除?

ios - 居中 UINavigationBar 标题文本问题

ios - 如何解压缩文件?

ios - Xcode 5 使用不同的图像取决于是否使用 iOS 7 或更低版本

ios - 如何将 iOS UIAutomation 测试的输出转换为 Jenkins 的 JUnit 样式输出?

iphone - 关于通过核心数据自动生成代码的快速问题

iphone - 添加到现有联系人

ios - 重写 UITextField 委托(delegate)方法

ios - 在右侧而不是左侧显示 UIToolbar 的 UIBarButtonItem

ios - FCM 和 iOS - 仅在切换到前台或重新打开应用程序时收到消息