服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - IOS - iOS App中UILabel的自定义及在Auto Layout中的使用

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

2021-01-10 14:49ForeverYoung21 IOS

这篇文章主要介绍了iOS App中UILabel的自定义及在Auto Layout中的使用,示例代码为传统的Objective-C语言,需要的朋友可以参考下

自定义uilabel,接受触摸事件:

复制代码 代码如下:

#import <uikit/uikit.h>
 
@interface mylabel : uilabel
 
@end

 

复制代码 代码如下:


#import "mylabel.h"

 

@implementation mylabel

- (id)initwithframe:(cgrect)frame
{
    self = [super initwithframe:frame];
    if (self) {
        // initialization code
    }
    return self;
}

-(void)touchesbegan:(nsset *)touches withevent:(uievent *)event{
    nslog(@"mylabel touch");
}

@end

 

复制代码 代码如下:


#import "viewcontroller.h"

 

@implementation viewcontroller

- (void)viewdidload
{
    [super viewdidload];
    [self.view setbackgroundcolor:[uicolor greencolor]];
   
    mylabel *label = [[mylabel alloc] init];
    label.frame = cgrectmake(60, 100, 200, 50);
    label.text = @"hello world";
    label.backgroundcolor = [uicolor bluecolor];
   
    label.userinteractionenabled = yes;
   
    [self.view addsubview:label];
}
 - (void)touchesbegan:(nsset *)touches withevent:(uievent *)event{
   nslog(@"viewcontroller touch");
}


如果label.userinteractionenabled = no; (默认值),当用户点击label时将显示“viewcontroller touch”。

 

如果在mylabe中加入:

复制代码 代码如下:

 -(void)touchesbegan:(nsset *)touches withevent:(uievent *)event{
     nslog(@"mylabel touch");
     [self.nextresponder touchesbegan:touches withevent:event];  // 接受到事件后继续向上传递事件
 }

 

uilabel在autolayout中的使用

uilabel在autolayout中是有些特别的,因为这种可以显示文本的控件会根据自身文字的大小,长度等来确定自己的大小。在使用autolayout时,uilabel这种控件即使不设置宽度和高度,只设置x和y,也是没有问题的。
比如我们先在有一个label,我只设置了它的x是距离左面16p,y是距离top layout guide 8p,没有设置width和height,那么显示出来是这样:

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

可以看到,如果不设置宽度和高度,uilabel会根据文字长度和高度来确定大小。
但是当文字长度变长时:

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

虽然宽度也在改变,但是也带来了一个问题:因为文本太长,使label的宽度超出屏幕,多余的部分则不能显示出来。
我们可以给label增加width的约束,让它距离右边界也有16p的距离,然后看看效果:

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

可以看到宽度固定了,但是多余的部分又变成了...。
这是因为默认情况下,uilabel只显示一行,而现在我们宽度又确定,所以多余部分用...来表示。我们只需要将uilabel的numberoflines改为0,label就会根据文本的不同行数,显示对应的行数,并且宽度固定。

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

但是如果此时减少文字,会发现label的宽度也是固定的:

 

有的时候我们iOS App中UILabel的自定义及在Auto Layout中的使用不希望它是固定的宽度,而是让label的宽度和文字的长度一样,但是最长到距离右边界16p的地方。
解决方法:

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

将原来的equal改为greater than or equal,注意此时两个item的顺序,不同的顺序关系也不同。现在当文本多的时候label就会自动变高,当文本少的时候label就会自动减小。

延伸 · 阅读

精彩推荐
  • IOSiOS 雷达效果实例详解

    iOS 雷达效果实例详解

    这篇文章主要介绍了iOS 雷达效果实例详解的相关资料,需要的朋友可以参考下...

    SimpleWorld11022021-01-28
  • IOSiOS通过逆向理解Block的内存模型

    iOS通过逆向理解Block的内存模型

    自从对 iOS 的逆向初窥门径后,我也经常通过它来分析一些比较大的应用,参考一下这些应用中某些功能的实现。这个探索的过程乐趣多多,不仅能满足自...

    Swiftyper12832021-03-03
  • IOSIOS开发之字典转字符串的实例详解

    IOS开发之字典转字符串的实例详解

    这篇文章主要介绍了IOS开发之字典转字符串的实例详解的相关资料,希望通过本文能帮助到大家,让大家掌握这样的方法,需要的朋友可以参考下...

    苦练内功5832021-04-01
  • IOS解析iOS开发中的FirstResponder第一响应对象

    解析iOS开发中的FirstResponder第一响应对象

    这篇文章主要介绍了解析iOS开发中的FirstResponder第一响应对象,包括View的FirstResponder的释放问题,需要的朋友可以参考下...

    一片枫叶4662020-12-25
  • IOSiOS中tableview 两级cell的展开与收回的示例代码

    iOS中tableview 两级cell的展开与收回的示例代码

    本篇文章主要介绍了iOS中tableview 两级cell的展开与收回的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    J_Kang3862021-04-22
  • IOSIOS 屏幕适配方案实现缩放window的示例代码

    IOS 屏幕适配方案实现缩放window的示例代码

    这篇文章主要介绍了IOS 屏幕适配方案实现缩放window的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    xiari5772021-06-01
  • IOSiOS布局渲染之UIView方法的调用时机详解

    iOS布局渲染之UIView方法的调用时机详解

    在你刚开始开发 iOS 应用时,最难避免或者是调试的就是和布局相关的问题,下面这篇文章主要给大家介绍了关于iOS布局渲染之UIView方法调用时机的相关资料...

    windtersharp7642021-05-04
  • IOS关于iOS自适应cell行高的那些事儿

    关于iOS自适应cell行高的那些事儿

    这篇文章主要给大家介绍了关于iOS自适应cell行高的那些事儿,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    daisy6092021-05-17