需求图如下所示
 
  1. UILabel “上期”   距离屏幕最左边 有35px
  2. UILabel “下期”   距离屏幕最右边 有35px
  3. 进行中文字在UIlabel 中间
 
图片效果如下:
 
 
实现思路:
 
  1. “上期"距离左边35,设置“上期”的X坐标为35即可。设置“上期”的Y坐标为整个头部(红色View)的中心位置即可,通过红色View的Frame高度 来得到他的中心轴的坐标。
  2. “下期”距离右边35,这个就无法通过直接设置35的距离来保持和右边边界距离刚好为35,要知道“下期”这个UIlabel的宽度,设置“下期”的X坐标为UIlabel“下期”的宽度 + 35px  即可。UILabel宽度如何获取?
 
获取UILabel宽度方法:通过UILabel中的文本方法来获取UILabel宽度,方法boundingRectWithSize如下
 
封装方法如下:
 
@implementation UILabel (ContentSize)
- (CGSize)contentSizeForWidth:(CGFloat)width
{
    if (nil == self.text || [@“" isEqualToString:self.text]) {
        return CGSizeZero;
    }
   
    CGRect contentFrame = [self.textboundingRectWithSize:CGSizeMake(width, MAXFLOAT)
                                                  options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading
                                               attributes:@{NSFontAttributeName:self.font}
                                                  context:nil];
   
    return CGSizeMake(ceil(contentFrame.size.width + 0.5), ceil(contentFrame.size.height + 0.5));
}

- (CGSize)contentSizeForWidthUsesDeviceMetrics:(CGFloat)width
{
    CGRect contentFrame = [self.textboundingRectWithSize:CGSizeMake(width, MAXFLOAT)
                                                  options:NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesDeviceMetrics
                                               attributes:@{NSFontAttributeName:self.font}
                                                  context:nil];
   
    return CGSizeMake(ceil(contentFrame.size.width + 0.5), ceil(contentFrame.size.height + 0.5));
}

- (CGSize)contentSize
{
    CGFloat screenWidth = [[UIScreenmainScreen] bounds].size.width;
   
    return [self contentSizeForWidth:screenWidth];
}

- (BOOL)isTruncated
{
    CGSize size = [self.textboundingRectWithSize:CGSizeMake(self.bounds.size.width, MAXFLOAT)
                                          options:NSStringDrawingUsesLineFragmentOrigin
                                       attributes:@{NSFontAttributeName:self.font}
                                          context:nil].size;
   
    return (size.height > self.frame.size.height);
}

 
通过以上方式,直接实现UIlabel 中的  contentSize 方法即可获得UIlabel文字的自适应宽度。
 
 
 
 
如上图的  “步数”,自适应方法也一样,“步数”的UILabel 距离 屏幕最右边的距离是固定不变的,所以要用UILabel中文字自适应的方法来解决。UILabel 的X坐标会随着“步数”Label的扩大而减少,使UILabel距离屏幕右边距离固定不变。
 
 
 
图(1)具体实现:
 
    _topView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, 40)];
    _topView.backgroundColor = NF_Color_C19;
   
    _topViewBigLabel = [[UILabelalloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
    _topViewBigLabel.font = [UIFont systemFontOfSize:Near_Final_Font_T4];
    _topViewBigLabel.textColor = NF_Color_C1;
    _topViewBigLabel.text = @"进行中";
    [_topViewBigLabelsizeToFit];
    _topViewBigLabel.center = CGPointMake(_topView.bounds.size.width/2,_topView.bounds.size.height/2);
    [self.view addSubview:_topView];
    [self.view addSubview:_topViewBigLabel];
   
    _topViewleftLabel = [[UILabelalloc] init];
    _topViewleftLabel.font = [UIFont systemFontOfSize:Near_Final_Font_T9];
    _topViewleftLabel.textColor = NF_Color_C1;
    _topViewleftLabel.text = @"上期";
    _topViewleftLabel.frame = CGRectMake(35, 0, 0, 0);
    [_topViewleftLabelsizeToFit];
    _topViewleftLabel.centerY = _topView.bounds.size.height/2;
    [_topView addSubview:_topViewleftLabel];
      
    _topViewrightLabel = [[UILabelalloc] init];
    _topViewrightLabel.font = [UIFont systemFontOfSize:Near_Final_Font_T9];
    _topViewrightLabel.textColor = NF_Color_C1;
    _topViewrightLabel.text = @"下期";
    _topViewrightLabel.frame = CGRectMake(SCREEN_WIDTH-_topViewrightLabel.contentSize.width-35, 0, 0, 0);
    [_topViewrightLabelsizeToFit];
    _topViewrightLabel.centerY = _topView.bounds.size.height/2;
    [_topView addSubview:_topViewrightLabel];
    
 
 

UILabel实现自适应宽高需要注意的地方(二)的更多相关文章

  1. UILabel实现自适应宽高需要注意的地方(三)

        一.需求图如下所示    UILabel 的高度自适应 UILabel中的段落间距可设置   图片效果如下:   调整段落适应长宽高方式:         需求:   保证"游戏玩法 ...

  2. UILabel实现自适应宽高需要注意的地方

    需求如下:   需要显示2行文字,宽度为 SCREEN_Width - 40 高度为两行文本的自适应高度 需要在此UILabel 下面添加imageView , 因此UIlabel 的高度需要准确,不 ...

  3. 小程 序swiper自适应宽高

    https://blog.csdn.net/qq_31604363/article/details/73715944 小程 序swiper自适应宽高 小程 序swiper自适应宽高

  4. OpenGL ES学习笔记(二)——平滑着色、自适应宽高及三维图像生成

    首先申明下,本文为笔者学习<OpenGL ES应用开发实践指南(Android卷)>的笔记,涉及的代码均出自原书,如有需要,请到原书指定源码地址下载. <Android学习笔记--O ...

  5. iOS - web自适应宽高(预设置的大小)

    //web自适应宽高 -(void)webViewDidFinishLoad:(UIWebView *)webView { NSLog(@"wessd"); [ webView s ...

  6. iview Carousel 轮播图自适应宽高;iview 轮播图 图片重叠问题;iview tabs 高度互相影响问题;vue this问题;

    最终效果图: 一.轮播图中图片自适应宽高:  <Carousel loop v-bind:height="imgHeight+'px'" v-model="caro ...

  7. UILabel 自适应宽高

    #import <UIKit/UIKit.h> @interface UILabel (UILabel_LabelHeighAndWidth) + (CGFloat)getHeightBy ...

  8. js和php计算图片自适应宽高算法实现

    js Code: <script> $width = $(imgobj).width(); //图原始宽 $newheight = $(imgobj).height(); //图原始高 $ ...

  9. css background-image 自适应宽高——转载

    就是这么简单的一句话,设置背景图,并让它100%的适应导航栏宽高,并设置不重复,大小100%就OK了 .zjhn-nav li.active a{ background-image:url(../im ...

随机推荐

  1. Android SDK location should not contain whitespace, as this cause problems with NDK tools

    解决方案一: The easiest solution is to move the SDK somewhere else, where there is no space or other whit ...

  2. Arcgis api for javascript学习笔记(4.5版本)-三维地图的飞行效果

    其实就只是用到了 view.goTo()  函数,再利用 window.setInterval()  函数(定时器)定时执行goTo().代码如下: <!DOCTYPE html> < ...

  3. 关于MOVE 和 CopyMemory 的用法区别

    最近做了一个数据采集服务器, 根据程序的框架,使用了大量的指针结构体(内存块) 操作. 例子: PArrayByte = ^TArrayByte;  TArrayByte = packed recor ...

  4. matlab 小波处理工具箱

    1. wavedec:多尺度(multilevel)一维小波分解 [C,L] = wavedec(X,N,'wname') [C,L] = wavedec(X,N,Lo_D,Hi_D) 返回值 L(b ...

  5. OpenSSL 使用 base64 编码/解码(liang19890820)

    关于 OpenSSL 的介绍及安装请参见:Windows 下编译 OpenSSL 下面主要介绍有关 OpenSSL 使用 base64 编码/解码. 简述 编码解码 更多参考 编码/解码 #inclu ...

  6. Delphi 快速获取文件大小(使用_lopen和FileSeek,此函数可以快速获取文件大小,即使文件已经被其它程序锁定)

    function GetFileSize(const fName: AnsiString): Int64; var hFile: THandle; begin hFile := _lopen(PAns ...

  7. 对XAML进行编辑的辅助类(XamlHelper)

    原文:对XAML进行编辑的辅助类(XamlHelper) // XamlHelper.cs// --------------------------------------------// 对XAML ...

  8. WPF - 善用路由事件

    原文:WPF - 善用路由事件 在原来的公司中,编写自定义控件是常常遇到的任务.但这些控件常常拥有一个不怎么好的特点:无论是内部还是外部都没有使用路由事件.那我们应该怎样宰自定义控件开发中使用路由事件 ...

  9. springboot使用logback日志,部署到tomcat不生效问题解决

    1.springboot 配置日志方法 使用该方法配置日志,在本地调试可以正常写入日志文件,但是打包发布到tomcat以后日志配置不生效. 2.修改配置 Spring Boot官方推荐优先使用带有-s ...

  10. StaticResource和DynamicResource

    Resource 资源(Resource)是保存在可执行文件中的一种不可执行数据,用来保存一些可以被重复利用的样式,对象定义以及一些传统的资源如二进制数据,图片等等我们可以在任何元素上定义资源 Sta ...