NSAttributedString包装问题

时间:2013-07-17 04:24:18

标签: ios objective-c xcode4.6 nsattributedstring

我正在尝试将属性文本设置为标签。这些属性似乎与字体和颜色有关。

我面临的唯一问题是线条的包装。 UILabel的大小为(200,300),numberofLines = 0。因此,它应该包装线,但它不会发生。

   NSMutableString *title=[[NSMutableString alloc] init];
    NSRange range1;
    NSRange range2;
    NSRange range3;



        NSString *str1=@"ABCD EFGHI klm";
        [title appendString:str1];
        range1=NSMakeRange(0, str1.length);


        NSString *str2=@"PQRSSSS ";
        [title appendString:str2];
        range2=NSMakeRange(range1.length, str2.length);


        NSString *str3=@"1235 2347 989034 023490234 90";
        [title appendString:str3];
        range3=NSMakeRange(range2.location+range2.length, str3.length);


    NSMutableAttributedString *attributeText=[[NSMutableAttributedString alloc] initWithString:title];
    [attributeText setAttributes:[NSDictionary dictionaryWithObjectsAndKeys:color1,NSForegroundColorAttributeName,[self getStlylishItalicFont:13.0] ,NSFontAttributeName,nil] range:range1];
    [attributeText setAttributes:[NSDictionary dictionaryWithObjectsAndKeys:color2,NSForegroundColorAttributeName,[self getStylishFont:13.0] ,NSFontAttributeName,nil] range:range2];
    [attributeText setAttributes:[NSDictionary dictionaryWithObjectsAndKeys:color3,NSForegroundColorAttributeName,[self getStylishBoldFont:13.0] ,NSFontAttributeName,nil] range:range3];

    self.myTextLabel.attributedText=attributeText;

UILabel显示如下,即使高度为300。

ABCD EFGHI klm PQRSSSS 1235 234 ...

5 个答案:

答案 0 :(得分:5)

您需要的是NSParagraphStyle属性:

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;
paragraphStyle.alignment = NSTextAlignmentLeft;
paragraphStyle.lineSpacing = 1;

//Now add this to your attributes dictionary for the key NSParagraphStyleAttributeName eg, 

@{NSParagraphStyleAttributeName:paragraphStyle,...}

在一个不相关的说明中,您知道以现代Objective-c格式创建字典会更好。每当我不这样做,我的导师就会生气。这看起来像这样:

[attributeText setAttributes:@{NSForegroundColorAttributeName:color1, NSFontAttributeName:[self getStlylishItalicFont:13.0], NSParagraphStyleAttributeName:paragraphStyle, }];
//The trailing comma in the dictionary definition is not at typo it is important.

答案 1 :(得分:2)

确保将UILabel的换行模式属性设置为您想要的属性,如下所示:

UILabel.lineBreakMode = NSLineBreakByWordWrapping;

或者,如果您使用的是Interface Builder,则可以在那里进行。

答案 2 :(得分:0)

为什么不能将numberoflines设置为1.因为包装有意义但是0行没有意义..而且你必须为标签设置适当的框架。

答案 3 :(得分:0)

我认为你正面临着uilabel增加高度的问题,如果你需要标签中的多行,你必须给出havin numberoflines = 0的属性;之后,你必须根据你给标签的文字大小调整标签框的大小。

请检查以下代码,我可能对您有用,

        NSString *someText = [NSString stringWithFormat:@"%@",[[arrFulldetails objectAtIndex:indexPath.row]valueForKey:@"MessageText"]];
        CGSize constraintSize;
        constraintSize.width = 300.0f;
        constraintSize.height =100000;
        CGSize stringSize =[someText sizeWithFont: [UIFont boldSystemFontOfSize: 17] constrainedToSize: constraintSize lineBreakMode: UILineBreakModeWordWrap];
        CGRect rect ;
        rect = CGRectMake(10, 150, 210, 20+stringSize.height);

答案 4 :(得分:0)

以及设置:

    self.myTextLabel.lineBreakMode = NSLineBreakByWordWrapping;
    self.myTextLabel.numberOfLines = 0;

您可能还需要将标签的布局约束设置为其超级视图。当我忽略将标签的尾随约束固定到标签的超级视图时,我遇到了这个问题。