【问题标题】:ios how to autoresize uilabel's height when text is added OR deleted (and numberOfLines = 0)ios如何在添加或删除文本时自动调整uilabel的高度(并且numberOfLines = 0)
【发布时间】:2012-07-12 11:59:18
【问题描述】:

我有一个显示用户“简历”的 UILabel。我还让用户能够通过在用户点击时弹出 uitextview 来编辑此文本,然后一旦用户完成从该 uitextview 添加或删除文本,我说 label.text = textview.text,因此它会更新 bio标签的文本。
但是,我想要一种方法来告诉标签根据添加或删除的文本量来修复它的高度。有没有办法做到这一点?提前谢谢!

内森F

【问题讨论】:

    标签: iphone ios resize height uilabel


    【解决方案1】:

    此方法“sizeWithFont”在 iOS 7 中已弃用,您可以使用以下方法:

    CGRect rect = [YourText boundingRectWithSize:CGSizeMake(labelWidth, CGFLOAT_MAX)
                                           options:NSStringDrawingUsesLineFragmentOrigin
                                           context:nil];
     NSLog(@"Height: %f",rect.size.height);
    

    更多信息请查看:Apple's Documentation

    【讨论】:

    • 我得到 [__NSCFConstantString pointSize]: unrecognized selector sent to instance after using the above code
    【解决方案2】:
    CGRect labelFrame = label.frame;
    labelFrame.size = [textview.text sizeWithFont:label.font
                                constrainedToSize:CGSizeMake(label.frame.size.width, CGFLOAT_MAX)
                                    lineBreakMode:label.lineBreakMode];
    label.frame = labelFrame;
    

    这将根据新文本调整标签(高度)的大小(同时尊重字体和换行模式)。

    注意:UILineBreakMode 自 6.0 起已被弃用。请改用 NSLineBreak。

    Source

    【讨论】:

      【解决方案3】:

      打电话

      [labelName sizeToFit];
      

      设置新文本后。还要确保像这样设置自动换行或字符换行:

      [labelName setLineBreakMode:UILineBreakModeWordWrap];
      

      [labelName setLineBreakMode:UILineBreakModeCharacterWrap];
      

      如果您有任何其他问题,请告诉我!

      【讨论】:

      • 谢谢。这完全有效,但我的标准之一是保持相同的宽度。
      【解决方案4】:

      您可以使用 [NSString sizeWithFont:...] 来测量用于标签的文本。

      另请参阅:How to get the size of a NSString

      【讨论】:

        猜你喜欢
        • 2016-07-11
        • 2016-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-27
        • 2010-10-01
        • 2014-09-30
        相关资源
        最近更新 更多