分享

iphone开发:UILabel的一些属性和常见用法

 求知665 2014-12-30

根据文字内容设置lab的高和宽

 

NSString *testString = @"00测试lab的自适应功能测试lab的自适应功\n11能测试lab的自适应功能\n22测试lab的自适应功能测试lab的自适应功能测试lab的自适应功能测试lab的自\n33适应功能测试lab的自适应功能测试lab的自适\n44";

    UILabel *ticketNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];//设置为0,因为这个大小位置什么的没有用

    ticketNameLabel.backgroundColor = [UIColor whiteColor];

    ticketNameLabel.numberOfLines = 0;//一定要设置为0

    ticketNameLabel.text = testString;//这个放的位置没有特殊要求

    ticketNameLabel.font = [UIFont boldSystemFontOfSize:18.0];//显示的字体大小是在这儿设置的所以要小心,不设置可以使用默认的字体大小

    

    //    CGRect aRect = CGRectMake(10, 5, 300, 0);//可以在这里设置然后给lab

    CGSize size = [testString sizeWithFont:[UIFont systemFontOfSize:18.1f] constrainedToSize:CGSizeMake(300, 1000) lineBreakMode:UILineBreakModeWordWrap];

    //这是最关键的,18.1f如果上面设定过这个的大小,比如18.0这儿就一定要比那个大 这个也也是一定要注意设置大点CGSizeMake(300, 1000)

    //    NSInteger height = MAX(size.height, 44.0f);//这是一个比较的东西,取最大值

    [ticketNameLabel setFrame:CGRectMake(10, 15, size.width, size.height)];

    

    [self.view addSubview:ticketNameLabel];

    [ticketNameLabel release];

label中显示不同颜色的字以及不同字体

首先继承一个label,要想在一个label中实现各种不同颜色的字,就是重绘。不多说,上代码

//设置颜色属性和字体属性

- (NSAttributedString *)illuminatedString:(NSString *)text 

                                     font:(UIFont *)AtFont{

    int len = [text length];

    //创建一个可变的属性字符串

    NSMutableAttributedString *mutaString = [[[NSMutableAttributedString alloc] initWithString:text] autorelease];

    //改变字符串 从1位 长度为1 这一段的前景色,即字的颜色。

    

    [mutaString addAttribute:(NSString *)(kCTForegroundColorAttributeName)

                       value:(id)self.stringColor.CGColor

                       range:NSMakeRange(0, len)];

    if (self.keywordColor != nil)

    {

        for (NSValue *value in list) 

        {

            //   NSValue *value = [list objectAtIndex:i];

            NSRange keyRange = [value rangeValue];

            [mutaString addAttribute:(NSString *)(kCTForegroundColorAttributeName)

                               value:(id)self.keywordColor.CGColor

                               range:keyRange];

        }

    }

    //设置部分字段的字体大小与其他的不同

    //设置是否使用连字属性,这里设置为0,表示不使用连字属性。标准的英文连字有FI,FL.默认值为1,既是使用标准连字。也就是当搜索到f时候,会把fl当成一个文字。

    int nNumType = 0;

    //    float fNum = 3.0;

    CFNumberRef cfNum = CFNumberCreate(NULL, kCFNumberIntType, &nNumType);

    //    CFNumberRef cfNum2 = CFNumberCreate(NULL, kCFNumberFloatType, &fNum);

    [mutaString addAttribute:(NSString *)kCTLigatureAttributeName

                       value:(id)cfNum

                       range:NSMakeRange(0, len)];

    //空心字

    //    [mutaString addAttribute:(NSString *)kCTStrokeWidthAttributeName value:(id)cfNum2 range:NSMakeRange(0, len)];

    CTFontRef ctFont2 = CTFontCreateWithName((CFStringRef)AtFont.fontName, 

                                             AtFont.pointSize,

                                             NULL);

    [mutaString addAttribute:(NSString *)(kCTFontAttributeName) 

                       value:(id)ctFont2 

                       range:NSMakeRange(0, len)];

    //   CFRelease(ctFont);

    CFRelease(ctFont2);

    return [[mutaString copy] autorelease];

}

//重绘Text

- (void)drawRect:(CGRect)rect 

{

    //获取当前label的上下文以便于之后的绘画,这个是一个离屏。

    CGContextRef context = UIGraphicsGetCurrentContext();

    //压栈,压入图形状态栈中.每个图形上下文维护一个图形状态栈,并不是所有的当前绘画环境的图形状态的元素都被保存。图形状态中不考虑当前路径,所以不保存

    //保存现在得上下文图形状态。不管后续对context上绘制什么都不会影响真正得屏幕。

    CGContextSaveGState(context);

    //xy轴方向移动

    CGContextTranslateCTM(context, 0.0, 0.0);

    //缩放xy轴方向缩放,-1.0为反向1.0,坐标系转换,沿x轴翻转180

    // CGContextScaleCTM(context, 1, 100);

    

    NSArray *fontArray = [UIFont familyNames];

    NSString *fontName;

    if ([fontArray count]) {

        fontName = [fontArray objectAtIndex:0];

    }

    //创建一个文本行对象,此对象包含一个字符

    CTLineRef line = CTLineCreateWithAttributedString((CFAttributedStringRef) 

                                                      [self illuminatedString:self.text font:self.font]); //[UIFont fontWithName:fontName size:60]

    //设置文字绘画的起点坐标。

    CGContextSetTextPosition(context, 0.0, 0.0);

    //在离屏上绘制line

    CTLineDraw(line, context);

    //将离屏上得内容覆盖到屏幕。此处得做法很像windows绘制中的双缓冲。

    CGContextRestoreGState(context);

    CFRelease(line);

    //CGContextRef myContext = UIGraphicsGetCurrentContext();

    //CGContextSaveGState(myContext);

    //[self MyColoredPatternPainting:myContext rect:self.bounds];

    //CGContextRestoreGState(myContext);

}


这里是label中实现多种颜色字体等的最主要的部分,注释已经写的比较清楚了。呵呵···
转载自:
http://www./bbs/read.php?tid-69385-keyword-???.html


//============================================
//解决方法如下
//============================================
中文显示设置
简体中文
STHeitiSC-Medium
STHeitiSC-Light
繁体中文
STHeitiTC-Medium
STHeitiTC-Light
日文汉字
STHeitiJ-Medium
STHeitiJ-Light
韩文汉字
STHeitiK-Medium
STHeitiK-Light
如此切换任何语言,都可以显示正确的字型

日文汉字也可以设置字体
HiraKakuProN-W6
HiraKakuProN-W3

    lab1.font=[UIFont systemFontOfSize:20.0];//字体大小

    [lab1 setFont:[UIFont fontWithName:@"Helvetica-Bold" size:23]];//还是字体大小


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多