csdnceshi73
喵-见缝插针
采纳率0%
2009-06-13 07:28

中的多行文本

已采纳

Is there a way to have multiple lines of text in UILabel like in the UITextView or should I use the second one instead?

转载于:https://stackoverflow.com/questions/990221/multiple-lines-of-text-in-uilabel

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

25条回答

  • csdnceshi55 ~Onlooker 12年前

    I found a solution.

    One just has to add the following code:

    // Swift
    textLabel.lineBreakMode = .ByWordWrapping // or NSLineBreakMode.ByWordWrapping
    textLabel.numberOfLines = 0 
    
    // For Swift >= 3
    textLabel.lineBreakMode = .byWordWrapping // notice the 'b' instead of 'B'
    textLabel.numberOfLines = 0
    
    // Objective-C
    textLabel.lineBreakMode = NSLineBreakByWordWrapping;
    textLabel.numberOfLines = 0;
    
    // C# (Xamarin.iOS)
    textLabel.LineBreakMode = UILineBreakMode.WordWrap;
    textLabel.Lines = 0;  
    

    Restored old answer (for reference and devs willing to support iOS below 6.0):

    textLabel.lineBreakMode = UILineBreakModeWordWrap;
    textLabel.numberOfLines = 0;
    

    On the side: both enum values yield to 0 anyway.

    点赞 29 评论 复制链接分享
  • csdnceshi70 笑故挽风 12年前

    In IB, set number of lines to 0 (allows unlimited lines)

    When typing within the text field using IB, use "alt-return" to insert a return and go to the next line (or you can copy in text already separated out by lines).

    点赞 21 评论 复制链接分享
  • csdnceshi55 ~Onlooker 9年前

    You can use \r to go to next line while filling up the UILabel using NSString.

    UILabel * label;
    
    
    label.text = [NSString stringWithFormat:@"%@ \r %@",@"first line",@"seconcd line"];
    
    点赞 10 评论 复制链接分享
  • csdnceshi53 Lotus@ 4年前

    Swift 3
    Set number of lines zero for dynamic text information, it will be useful for varying text.

    var label = UILabel()
    let stringValue = "A label\nwith\nmultiline text."
    label.text = stringValue
    label.numberOfLines = 0
    label.lineBreakMode = .byTruncatingTail // or .byWrappingWord
    label.minimumScaleFactor = 0.8 . // It is not required but nice to have a minimum scale factor to fit text into label frame
    

    enter image description here

    点赞 10 评论 复制链接分享
  • weixin_41568134 MAO-EYE 6年前

    you should try this:

    -(CGFloat)dynamicLblHeight:(UILabel *)lbl
    {
        CGFloat lblWidth = lbl.frame.size.width;
        CGRect lblTextSize = [lbl.text boundingRectWithSize:CGSizeMake(lblWidth, MAXFLOAT)
                                                   options:NSStringDrawingUsesLineFragmentOrigin
                                                attributes:@{NSFontAttributeName:lbl.font}
                                                   context:nil];
        return lblTextSize.size.height;
    }
    
    点赞 10 评论 复制链接分享
  • csdnceshi54 hurriedly% 7年前
    UILabel *labelName = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 30)];
    [labelName sizeToFit];
    labelName.numberOfLines = 0;
    labelName.text = @"Your String...";
    [self.view addSubview:labelName];
    
    点赞 10 评论 复制链接分享
  • weixin_41568174 from.. 10年前

    The best solution I have found (to an otherwise frustrating problem that should have been solved in the framework) is similar to vaychick's.

    Just set number of lines to 0 in either IB or code

    myLabel.numberOfLines = 0;
    

    This will display the lines needed but will reposition the label so its centered horizontally (so that a 1 line and 3 line label are aligned in their horizontal position). To fix that add:

    CGRect currentFrame = myLabel.frame;
    CGSize max = CGSizeMake(myLabel.frame.size.width, 500);
    CGSize expected = [myString sizeWithFont:myLabel.font constrainedToSize:max lineBreakMode:myLabel.lineBreakMode]; 
    currentFrame.size.height = expected.height;
    myLabel.frame = currentFrame;
    
    点赞 9 评论 复制链接分享
  • csdnceshi60 ℡Wang Yan 7年前

    You can do that via the Storyboard too:

    1. Select the Label on the view controller
    2. In the Attribute Inspector, increase the value of the Line option (Press Alt+Cmd+4 to show Attributes Inspector)
    3. Double click the Label in the view controller and write or paste your text
    4. Resize the Label and/or increase the font size so that the whole text could be shown
    点赞 8 评论 复制链接分享
  • csdnceshi54 hurriedly% 7年前
    UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 150, 30)];
    [textLabel sizeToFit];
    textLabel.numberOfLines = 0;
    textLabel.text = @"Your String...";
    
    点赞 6 评论 复制链接分享
  • weixin_41568127 ?yb? 9年前
    myUILabel.numberOfLines = 0;
    myUILabel.text = @"your long string here";
    [myUILabel sizeToFit];
    
    点赞 6 评论 复制链接分享
  • csdnceshi79 python小菜 4年前

    Set below either in code or in storyboard itself

    Label.lineBreakMode = NSLineBreakByWordWrapping; Label.numberOfLines = 0;

    and please don't forget to set left, right, top and bottom constraints for label otherwise it won't work.

    点赞 6 评论 复制链接分享
  • weixin_41568208 北城已荒凉 8年前
    UILabel *helpLabel = [[UILabel alloc] init];
    NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:label];
    helpLabel.attributedText = attrString;
    // helpLabel.text = label;
    
    helpLabel.textAlignment = NSTextAlignmentCenter;
    helpLabel.lineBreakMode = NSLineBreakByWordWrapping;
    helpLabel.numberOfLines = 0;
    

    For some reasons its not working for me in iOS 6 not sure why. Tried it with and without attributed text. Any suggestions.

    点赞 6 评论 复制链接分享
  • csdnceshi52 妄徒之命 4年前

    These things helped me

    Change these properties of UILabel

    label.numberOfLines = 0;
    label.adjustsFontSizeToFitWidth = NO;
    label.lineBreakMode = NSLineBreakByWordWrapping;
    

    And while giving input String use \n to display different words in different lines.

    Example :

     NSString *message = @"This \n is \n a demo \n message for \n stackoverflow" ;
    
    点赞 6 评论 复制链接分享
  • csdnceshi80 胖鸭 8年前

    Use this to have multiple lines of text in UILabel:

    textLabel.lineBreakMode = NSLineBreakByWordWrapping;
    textLabel.numberOfLines = 0;
    

    Swift:

    textLabel.lineBreakMode = .byWordWrapping
    textLabel.numberOfLines = 0
    
    点赞 4 评论 复制链接分享
  • csdnceshi69 YaoRaoLov 10年前
    textLabel.lineBreakMode = UILineBreakModeWordWrap;
    textLabel.numberOfLines = 0;
    

    The solution above does't work in my case. I'm doing like this:

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        // ...
    
        CGSize size = [str sizeWithFont:[UIFont fontWithName:@"Georgia-Bold" size:18.0] constrainedToSize:CGSizeMake(240.0, 480.0) lineBreakMode:UILineBreakModeWordWrap];
        return size.height + 20;
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    
        if (cell == nil)
        {
            // ...
            cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
            cell.textLabel.numberOfLines = 0;
            cell.textLabel.font = [UIFont fontWithName:@"Georgia-Bold" size:18.0];
        }
    
        // ...
    
        UILabel *textLabel = [cell textLabel];
        CGSize size = [text sizeWithFont:[UIFont fontWithName:@"Georgia-Bold" size:18.0]
                                            constrainedToSize:CGSizeMake(240.0, 480.0)
                                                lineBreakMode:UILineBreakModeWordWrap];
    
        cell.textLabel.frame = CGRectMake(0, 0, size.width + 20, size.height + 20);
    
        //...
    }
    
    点赞 4 评论 复制链接分享
  • csdnceshi53 Lotus@ 6年前

    I agree with Jarred Olson, NSLineBreakByWordWrapping is default. I added property sizeToFit like the guide of Gurumoorthy Arumugam to fix it.

    If you want the font inside your label to adjust itself to fit into the boundaries of the label. You can use :

    textLabel.adjustsFontSizeToFitWidth = YES;
    

    Thanks all.

    点赞 3 评论 复制链接分享
  • csdnceshi72 谁还没个明天 10年前

    If you have to use the:

    myLabel.numberOfLines = 0;
    

    property you can also use a standard line break ("\n"), in code, to force a new line.

    点赞 3 评论 复制链接分享
  • csdnceshi51 旧行李 5年前

    Use story borad : select the label to set number of lines to zero......Or Refer this

    enter image description here

    点赞 3 评论 复制链接分享
  • csdnceshi64 游.程 7年前

    lets try this

    textLabel.lineBreakMode = NSLineBreakModeWordWrap; // UILineBreakModeWordWrap deprecated     
    textLabel.numberOfLines = 0;                          
    
    点赞 2 评论 复制链接分享
  • csdnceshi70 笑故挽风 7年前

    Already answered, but you can do it manually in the storyboard too. Under Attributes Inspector for the Label, you can change Line Breaks to Word Wrap (or character wrap).

    点赞 1 评论 复制链接分享
  • csdnceshi52 妄徒之命 7年前

    In this function pass string that you want to assign in label and pass font size in place of self.activityFont and pass label width in place of 235, now you get label height according to your string. it will work fine.

    -(float)calculateLabelStringHeight:(NSString *)answer
    {
        CGRect textRect = [answer boundingRectWithSize: CGSizeMake(235, 10000000) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:self.activityFont} context:nil];
        return textRect.size.height;
    
    }
    
    点赞 1 评论 复制链接分享
  • weixin_41568174 from.. 7年前
    Try using this code:
    
    lblName.numberOfLines = 0;
    [lblName sizeToFit];
    
    点赞 1 评论 复制链接分享
  • csdnceshi71 Memor.の 3年前

    On C#, this worked for me inside UITableViewCell.

            UILabel myLabel = new UILabel();
            myLabel.Font = UIFont.SystemFontOfSize(16);
            myLabel.Lines = 0;
            myLabel.TextAlignment = UITextAlignment.Left;
            myLabel.LineBreakMode = UILineBreakMode.WordWrap;
            myLabel.MinimumScaleFactor = 1;
            myLabel.AdjustsFontSizeToFitWidth = true;
    
           myLabel.InvalidateIntrinsicContentSize();
           myLabel.Frame = new CoreGraphics.CGRect(20, mycell.ContentView.Frame.Y + 20, cell.ContentView.Frame.Size.Width - 40, mycell.ContentView.Frame.Size.Height);
           myCell.ContentView.AddSubview(myLabel);
    

    I think the point here is:-

                myLabel.TextAlignment = UITextAlignment.Left;
                myLabel.LineBreakMode = UILineBreakMode.WordWrap;
                myLabel.MinimumScaleFactor = 1;
                myLabel.AdjustsFontSizeToFitWidth = true;
    
    点赞 评论 复制链接分享
  • csdnceshi61 derek5. 6年前

    This code is returning size height according to text

    + (CGFloat)findHeightForText:(NSString *)text havingWidth:(CGFloat)widthValue andFont:(UIFont *)font
     {
        CGFloat result = font.pointSize+4;
        if (text) 
    {
            CGSize size;
    
            CGRect frame = [text boundingRectWithSize:CGSizeMake(widthValue, 999)
                                              options:NSStringDrawingUsesLineFragmentOrigin
                                           attributes:@{NSFontAttributeName:font}
                                              context:nil];
            size = CGSizeMake(frame.size.width, frame.size.height+1);
            result = MAX(size.height, result); //At least one row
        }
        return result;
    }
    
    点赞 评论 复制链接分享
  • csdnceshi61 derek5. 3年前

    Swift 4:

    label.lineBreakMode = .byWordWrapping
    
    label.numberOfLines = 0
    
    label.translatesAutoresizingMaskIntoConstraints = false
    
    label.preferredMaxLayoutWidth = superview.bounds.size.width - 10 
    
    点赞 评论 复制链接分享