iOS开发中使用UILabel设置字体的相关技巧小结

一、初始化


代码如下:

UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(40, 40, 120, 44)];
    
[self.view addSubview:myLabel];

二、设置文字

1、设置默认文本

代码如下:

NSString *text = @"标签文本";
myLabel.text = text;

效果:

2、设置标签文本(此属性是iOS6.0之后才出现,如若不是必要,不建议使用此属性)

代码如下:

NSString *text = @"其实没什么";
    
NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString:text];
    
[attributeString setAttributes:@{NSForegroundColorAttributeName : [UIColor redColor],   NSFontAttributeName : [UIFont systemFontOfSize:17]} range:NSMakeRange(2, 1)];
    
myLabel.attributedText = attributeString;

效果:

关键字标红的效果

代码如下:

NSString *keyword = @"开源";
NSString *result = @"开源中国社区";
 
// 设置标签文字
NSMutableAttributedString *attrituteString = [[NSMutableAttributedString alloc] initWithString:result];
 
// 获取标红的位置和长度
NSRange range = [result rangeOfString:keyword];
 
// 设置标签文字的属性
[attrituteString setAttributes:@{NSForegroundColorAttributeName : [UIColor redColor],   NSFontAttributeName : [UIFont systemFontOfSize:17]} range:range];
 
// 显示在Label上
label.attributedText = attrituteString;

3、设置字体,如果是使用②中的文本,那在设置AttributeString的属性时已经设置过Font了和textColor了,直接使用①设置文本时设置文本时,设置字体方法

代码如下:

myLabel.font = [UIFont systemFontOfSize:13];

4、设置颜色

代码如下:

myLabel.textColor = [UIColor blueColor];

5、设置对齐方式

代码如下:

myLabel.textAlignment = NSTextAlignmentCenter;//居中

NSTextAlignmentLeft //左对齐
NSTextAlignmentCenter //居中
NSTextAlignmentRight  //右对齐
NSTextAlignmentJustified//最后一行自然对齐
NSTextAlignmentNatural //默认对齐脚本

NSTextAlignmentJustified和 NSTextAlignmentNatural用的时候会报错,程序崩溃,暂时不知道什么时候可以使用,希望知道的指教一下,感激不尽。
5、文字剪裁方式

代码如下:

NSLineBreakByWordWrapping = 0,//以空格为边界,保留单词
NSLineBreakByCharWrapping,    //保留整个字符
NSLineBreakByClipping,        //简单剪裁,到边界为止
NSLineBreakByTruncatingHead,  //按照"……文字"显示
NSLineBreakByTruncatingTail,  //按照"文字……文字"显示
NSLineBreakByTruncatingMiddle //按照"文字……"显示

myLabel.lineBreakMode = NSLineBreakByTruncatingHead;

7、设置Label enabled属性
如果设置为No,则文字颜色会变暗,表明其是不可用的,默认值为YES。

代码如下:

myLabel.enabled = NO;

三、匹配Label上的文字
1、是否根据文本宽度改变字体大小

代码如下:

myLabel.adjustsFontSizeToFitWidth = YES;
//假设文字内容为@"曾在月光之下望烟花,曾共看夕阳渐降下",Label长度为200,则一行显示不下,若设置此属性为YES,则会降低字体大小,以显示全部内容。

前后对比:

2、改变字母之间的间距来适应label大小

代码如下:

//当这个属性是YES,标签可能改变标签文本的字母间距,以使该文本更适合标签的边界内。此属性的字符串,而不管当前行的行的裁剪模式。该属性的默认值是NO。
myLabel.adjustsLetterSpacingToFitWidth = NO;
 
//个人使用了一下,没发现有什么区别,不知道具体是什么时候发挥作用。

3、设置对齐基线

代码如下:

myLabel.adjustsFontSizeToFitWidth = YES;//调整基线位置需将此属性设置为YES

myLabel.baselineAdjustment = UIBaselineAdjustmentAlignBaselines;

此属性有三个值可选

代码如下:

UIBaselineAdjustmentAlignBaselines //文本最上端与Label中线对齐,默认值
UIBaselineAdjustmentAlignCenters   //文本中线与Label中线对齐
UIBaselineAdjustmentNone           //文本最下端与Label中线对齐

4、最小字体大小,当字体小于这个最小值时无效,显示此属性值
iOS6.0之前:minimumFontSize

iOS6.0之后:minimumScaleFactor

代码如下:

myLabel.minimumScaleFactor = 10.0;//默认值为0,为当前字体大小

5、行数

代码如下:

myLabel.numberOfLines = 2;//Label行数

6、高亮

代码如下:

myLabel.highlighted = YES;//是否高亮
myLabel.highlightedTextColor = [UIColor redColor];//高亮颜色;此属性在设置按钮的titleLabel时,无论highlighted是YES还是NO,在按钮按下时标题都显示此高亮颜色

7、阴影

代码如下:

myLabel.shadowColor = [UIColor grayColor];//阴影颜色,默认为nil
myLabel.shadowOffset = CGSizeMake(1, 1);//阴影的偏移点

四、Label位置
1、计算UIlabel 随字体多行后的高度

代码如下:

CGRect result,bounds;
bounds = CGRectMake(0, 0,200, 300);
heightLabel = [myLabel textRectForBounds:bounds limitedToNumberOfLines:20];//计算20行后的Label的Frame
NSLog(@"%f",heightLabel.size.height);

2、绘制text到指定区域

代码如下:

- (void)drawTextInRect:(CGRect)rect
//需要重载此方法,然后由子类调用,重写时调用super可以按默认图形属性绘制,若自己完全重写绘制函数,就不用调用super了

PS:关于字体名字的问题
在iOS下使用自定义字体比较蛋疼的就是名字不知道是什么,大部分字体可以在打开字体册就可以看到,如正常的XXX-Regular,但有时候名字并不是这个,有可能是XXX而已,还有可能是XXXItalic(而不是XXX-Italic)。名字错了,建立的字体肯定是空的。

那怎么办呢?

有办法的,有一段代码可以把当前所有的字体名字输出来。

如:

1.把XXX字体加入到resouce;

2.Info.plist的Fonts provided by application里面加入字体文件名

3.运行下面代码

代码如下:

NSArray *familyNames = [UIFont familyNames];
    for( NSString *familyName in familyNames ){
        printf( "Family: %s \n", [familyName UTF8String] );
        NSArray *fontNames = [UIFont fontNamesForFamilyName:familyName];
        for( NSString *fontName in fontNames ){
            printf( "\tFont: %s \n", [fontName UTF8String] );
        }
    }

4.找到你的字体XXX,如下,Font:后面的就是我们要的字体名字

Family: Courier New
  Font: CourierNewPSMT
  Font: CourierNewPS-BoldMT
  Font: CourierNewPS-ItalicMT
  Font: CourierNewPS-BoldItalicMT
Family: Oriya Sangam MN
  Font: OriyaSangamMN
  Font: OriyaSangamMN-Bold

5.自然是使用,如

代码如下:

UIFont *font_regular = [UIFont fontWithName:@"CourierNewPS-ItalicMT" size:84];

(0)

相关推荐

  • iOS长按UIlabel实现可复制功能

    前言 相信大家都知道在iOS中有三个控件自身是支持拷贝,粘贴的,如:UITextField,UITextView,UIWebView.但是,有时候我们会遇到需要长按UIlabel,弹出"复制"item,来实现可复制.那该怎么办呢?下面就来一起看看吧. 首先UIKit中提供给我们几个类 在开始之前,我们需要自定义一个WINCopyLabel继承UILable - (instancetype)initWithFrame:(CGRect)frame { if (self = [super i

  • iOS获取Label高度的几种方法与对比

    介绍 在设置 UILabel 的 Frame 高度时,不能简单的设置为字体的 font size.否则会将字体的一部分裁剪掉.因为 UILabel 在不同的字体设置下,对 Frame 的高度要求也不一样,大多数情况下都比Font的高度设置要高一些. 一.sizeThatFits 使用 view 的 sizeThatFits 方法. // return 'best' size to fit given size. does not actually resize view. Default is

  • iOS在固定的label上动态显示所有文字

    照例先看下效果图: 思路 创建一个view 作为所有内容的父控件, 并且添加到上面一个 label, 作为显示文字的载体 UILabel* contentLabel = [[UILabel alloc] init]; [contentLabel sizeToFit]; contentLabel.backgroundColor = [UIColor clearColor]; _contentLabel = contentLabel; [self addSubview:self.contentLab

  • iOS Label随字自动变大效果

    一.效果图. 二.工程图. 三.代码. RootViewController.h #import <UIKit/UIKit.h> //添加HPGrowingTextView头文件 #import "HPGrowingTextView.h" @interface RootViewController : UIViewController <HPGrowingTextViewDelegate> { HPGrowingTextView *textView; } @en

  • iOS应用中UILabel文字显示效果的常用设置总结

    创建UIlabel对象 复制代码 代码如下: UILabel* label = [[UILabel alloc] initWithFrame:self.view.bounds]; 设置显示文本 复制代码 代码如下: label.text = @"This is a UILabel Demo,"; 设置文本字体 复制代码 代码如下: label.font = [UIFont fontWithName:@"Arial" size:35]; 设置文本颜色 复制代码 代码如

  • iOS App开发中修改UILabel默认字体的方法

    在项目比较成熟的基础上,遇到了这样一个需求,应用中需要引入新的字体,需要更换所有Label的默认字体,但是同时,对于一些特殊设置了字体的label又不需要更换.乍看起来,这个问题确实十分棘手,首先项目比较大,一个一个设置所有使用到的label的font工作量是巨大的,并且在许多动态展示的界面中,可能会漏掉一些label,产生bug.其次,项目中的label来源并不唯一,有用代码创建的,有xib和storyBoard中的,这也将浪费很大的精力.这种情况下,我们可能会有下面两种处理方式. 一.普通方

  • iOS App中UILabel的自定义及在Auto Layout中的使用

    自定义UILabel,接受触摸事件: 复制代码 代码如下: #import <UIKit/UIKit.h>   @interface myLabel : UILabel   @end 复制代码 代码如下: #import "myLabel.h" @implementation myLabel - (id)initWithFrame:(CGRect)frame {     self = [super initWithFrame:frame];     if (self) {

  • iOS App开发中扩展RCLabel组件进行基于HTML的文本布局

    iOS系统是一个十分注重用户体验的系统,在iOS系统中,用户交互的方案也十分多,然而要在label中的某部分字体中添加交互行为确实不容易的,如果使用其他类似Button的控件来模拟,文字的排版又将是一个解决十分困难的问题.这个问题的由来是项目中的一个界面中有一些广告位标签,而这些广告位的标签却是嵌在文本中的,当用户点击文字标签的位置时,会跳转到响应的广告页. CoreText框架和一些第三方库可以解决这个问题,但直接使用CoreText十分复杂,第三方库多注重于富文本的排版,对类似文字超链接的支

  • iOS中UILabel text两边对齐的实现代码

    废话不多说了,直接给大家贴代码了,具体代码如下所示: -(NSAttributedString *)setTextString:(NSString *)text { NSMutableAttributedString *mAbStr = [[NSMutableAttributedString alloc] initWithString:text]; NSMutableParagraphStyle *npgStyle = [[NSMutableParagraphStyle alloc] init]

  • iOS开发笔记--详解UILabel的相关属性设置

    在iOS编程中UILabel是一个常用的控件,下面分享一下UILabel的相关属性设置的方法. 很多学习iOS6编程都是从storyboard开始,用到UILabel时是将控件拖到storyboard中生成实现,如果想要在-(void)viewDidLoad中用代码如[_label initWithFrame:CGRectMake(X,Y,WIDTH,HEIGHT)]方法改变拖拽到storyboard的label的大小是行不通的,因为程序加载时先执行了-(void)viewDidLoad的代码,

随机推荐

其他