当前位置: 首页 > 工具软件 > Lanai-ui > 使用案例 >

UI界面-UILabel

李昌勋
2023-12-01

UILabel

UILabel,标签类,是iPhone界面最基本的控件,主要用来显示文本信息

让一个控件通过纯代码形式创建并且可视化

初始化一个label控件

UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(50, 50, 200, 200)];

将控件添加到视图上

[self.view addSubview:label1];
上面两步就是使一个控件可见化的基本步骤,当然一些空间还要设置一下文本或者背景颜色与空间背景颜色不同才可以可以看到。

label控件的相关属性

设置label控件的背景颜色以及文字颜色

    label1.backgroundColor = [UIColor redColor];
    label1.textColor = [UIColor yellowColor];

设置label控件的行数(超出以省略号表示),设置为0就是根据文本自动换行

label1.text = @"自动换行自动换行自动换行自动换行自动换行自动换行自动换行自动换行自动换行自动换行自动换行自动换行自动换行自动换行";
 //设置UILabel的行数,设置为0时自动换行
    label1.numberOfLines = 0;

设置对齐方式

label1.textAlignment = NSTextAlignmentCenter;

NS_ENUM NSTextAlignment {

NSTextAlignmentLeft 左对齐,默认
NSTextAlignmentRight   右对齐
NSTextAlignmentCenter   居中对齐
NSTextAlignmentJustified 在一个段落的最后一行自然对齐
NSTextAlignmentNatural  默认对齐方式

}

设置省略号的位置(换行方式)

label1.lineBreakMode = NSLineBreakByTruncatingHead;

NS_ENUM NSLineBreakMode{

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

}

详细解释

UILineBreakModeCharacterWrap, 
以字符为单位换行,以字符为单位截断。

除了UILineBreakModeCharacterWrap,这几种换行方式都是以单词为单位换行,但是截断方式和省略形式不同

UILineBreakModeWordWrap = 0, 
以单词为单位截断。 
ILineBreakModeClip, 
以单词为单位换行。以字符为单位截断。 
UILineBreakModeHeadTruncation, 
以单词为单位换行。如果是单行,则开始部分有省略号。如果是多行,则中间有省略号,省略号后面有4个字符。
UILineBreakModeTailTruncation, 
以单词为单位换行。无论是单行还是多行,都是末尾有省略号。 
UILineBreakModeMiddleTruncation, 
以单词为单位换行。无论是单行还是多行,都是中间有省略号,省略号后面只有2个字符。

自动缩放

实现代码:

 UILabel *label2 = [[UILabel alloc] initWithFrame:CGRectMake(50, 50, 200, 200)];
    label2.backgroundColor = [UIColor blackColor];
    label2.textColor = [UIColor whiteColor];
    label2.text = @"自动缩放自动缩放自动缩放自动缩放自动缩放自动缩放自动缩放自动缩放自动缩放自动缩放自动缩放自动缩放自动缩放自动缩放自动缩放自动缩放自动缩放自动缩放";
    label2.font = [UIFont systemFontOfSize:30.0];
    label2.numberOfLines = 0;

    //自动调整字体大小
    label2.adjustsFontSizeToFitWidth = YES;
    //设置字体缩放的下限
    label2.minimumScaleFactor = 0.5;
    [self.view addSubview:label2];

自适应高度

boundingRectWithSize:<#(CGSize)#> attributes:<#(nullable NSDictionary<NSString *,id> *)#> context:<#(nullable NSStringDrawingContext *)#>

参数说明:

 CGSizeMake       设置200宽,30号字体
 attribute        构建一个字体大小的字典,这个字体的大
                  小要跟定义Label的大小一致
 context          字符串绘图选项

实现代码:

    UILabel *label3 = [[UILabel alloc] initWithFrame:CGRectMake(50, 50, 200, 200)];
    label3.text = @"自适应高度自适应高度自适应高度自适应高度自适应高度自适应高度自适应高度自适应高度自适应高度自适应高度自适应高度自适应高度自适应高度自适应高度自适应高度自适应高度自适应高度自适应高度自适应高度自适应高度自适应高度自适应高度aldfjlasjflajflajslfj";
    label3.backgroundColor = [UIColor blackColor];
    label3.textColor = [UIColor whiteColor];
    label3.numberOfLines = 0;

    CGRect rect = [label3.text boundingRectWithSize:CGSizeMake(200, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:label3.font} context:nil];
    label3.frame = CGRectMake(50, 50, rect.size.width, rect.size.height);
    [self.view addSubview:label3];

微博API接口接收消息到Label 控件上显示

根据我们要的接口的给出的JSON数据例子,去写一个封装的类去解析数据

在.h文件中把外层字典的所有key的名称列出(列不全会报错),并重写初始化这个类的方法:


#import <Foundation/Foundation.h>

@interface WeiBoModel : NSObject

@property (nonatomic,strong)NSArray *statuses;

@property (nonatomic,strong)NSNumber *hasvisible;

@property (nonatomic,strong)NSNumber *previous_cursor;

@property (nonatomic,strong)NSNumber *next_cursor;

@property (nonatomic,strong)NSNumber *total_number;

@property (nonatomic,strong)NSNumber *interval;

- (id)initWithDictionary:(NSDictionary *)dictionary;

@end

在.m文件实现初始化方法,用此方法去解析json的最外层字典(也可以如此类推去解析里面几层,不过所有键值对或数组元素要写全)

- (id)initWithDictionary:(NSDictionary *)dictionary{

    if (self = [super init]) {

        [self setValuesForKeysWithDictionary:dictionary];
    }
    return self;
}

在VC中,我们让label3作为我们显示接收数据的控件

    _label = label3;

写一个方法实现接受微博信息功能,以及在TouchBegan方法实现点击屏幕触发事件

- (void)dataTask{

    //配置会话环境
    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];

    //创建任务对象
    NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration];

    NSURLSessionDataTask *dataTask = [session dataTaskWithURL:[NSURL URLWithString:@"https://api.weibo.com/2/statuses/public_timeline.json?access_token=<#自己注册的token 值#>"] completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { 
        if (!error) {  
            NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
            WeiBoModel *model = [[WeiBoModel alloc] initWithDictionary:dic];
            NSString *text = [model.statuses[0] objectForKey:@"text"];  

            CGRect rect = [text boundingRectWithSize:CGSizeMake(200, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:_label.font} context:nil];
//            _label.frame = CGRectMake(50, 50, rect.size.width, rect.size.height);

            NSLog(@"%@",[NSValue valueWithCGRect:rect]);
            dispatch_async(dispatch_get_main_queue(), ^{
                _label.text = text;
                _label.center = self.view.center;
                _label.frame = rect;

            });
        }
    }];
    [dataTask resume];

}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

    [self dataTask];
}
 类似资料: