美文网首页
关于label自适应宽高

关于label自适应宽高

作者: 杨大虾 | 来源:发表于2017-04-19 10:42 被阅读82次

    首先声明的是

    系统label的文字在垂直方向,只支持居中


    1.参考:
    UILabel的高度和宽度自适应

    异:

    高度的要写numberOfLines(换行)
    宽度不用写numberOfLines
    同:
    ==
    1.都要写
    sizeToFit
    2.都是通过
    label的frame来拿最终的宽高

    ps:

    + (UILabel *)getSizeToFitHeightOfLabelWithX:(CGFloat)x
                                            y:(CGFloat)y
                          immobilizationWidth:(CGFloat)immobilizationWidth
                                        title:(NSString *)title
    {
        
        UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(x, y, immobilizationWidth, 0)];
        label.text = title;
        //
        label.font = [UIFont systemFontOfSize:default_font];
        label.numberOfLines = 0;
        [label sizeToFit];
        return label;
    }
    
    
    + (UILabel *)getSizeToFitWidthOfLabelWithX:(CGFloat)x
                                            y:(CGFloat)y
                                        title:(NSString *)title {
        /*
         经过调试,只要有sizeTofit,Label的宽高初始值即使给得再离谱,系统也会调回来,不过想想也正常,毕竟sizeTofit嘛(也就是说能对sizeTofit造成杀伤的只有label的文字和字体大小)
         */
        UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(x, y, 1000, 0)];
        label.font = [UIFont systemFontOfSize:default_font];
        label.text = title;
        [label sizeToFit];
        return label;
    }
    

    2.另一种解决label自适应宽度的方法(貌似适应不了高度)

    //根据文字字体大小,多少,和初始x轴,更新该label的大小和位置,并且是在label赋值之后
    - (void)updateLabelTextSite:(UILabel *)label textSize:(CGFloat)textSize orignX:(CGFloat)orignX{
        //不用autoLayout调这东西太蛋疼了
        // 设置Label的字体 HelveticaNeue  Courier
        UIFont *fnt = [UIFont fontWithName:@"HelveticaNeue" size:textSize];//24.0f
        label.font = fnt;
        // 根据字体得到NSString的尺寸
        CGSize size = [label.text sizeWithAttributes:[NSDictionary dictionaryWithObjectsAndKeys:fnt,NSFontAttributeName, nil]];
        // 名字的H
        CGFloat nameH = size.height;
        // 名字的W
        CGFloat nameW = size.width;
        
        label.frame = CGRectMake(orignX,
                                 0, nameW,nameH);
    }
    

    比较麻烦不是很建议


    3.label使用sizeToFit的小注意

    - (void)viewDidLoad {
        [super viewDidLoad];
        _a = [[UILabel alloc] initWithFrame:CGRectMake(8, 100,100, 30)];
        
        _a.font = [UIFont systemFontOfSize:29];
        
        
        _a.backgroundColor = [UIColor yellowColor];
        
    //    [self.view addSubview:_a];
        [self.testUIView addSubview:_a];
        
        _a.text = @"memedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemeda";
        //前
        _a.numberOfLines = 0;
        //后
        [_a  sizeToFit];
    
    }
    
    

    正常来讲是以下的效果:

    numberOfLines一定要写在sizeToFit的前面

    否则
    label的文字过多就直接不显示了(看到一下子懵了,好神奇的说,sizeToFit不了,直接放大招,不显示了?)

    label看起来没有显示

    不过再去看看图层还是是可以看的到的

    ps:即使numberOfLines写在了后面,如果label的text文字没那么多,那么变态,虽然没有适配,但是还是可以显示的


    上面分析的有点乱,记住这一句就行:numberOfLines一定要写在sizeToFit的前面

    相关文章

      网友评论

          本文标题:关于label自适应宽高

          本文链接:https://www.haomeiwen.com/subject/uypczttx.html