固定UILabel宽度分行显示

这种小伎俩估计都被用烂了,笔者给大家提供一个category文件,供大家简单设置哦.

各种富文本效果哦(普通文本也是可以用的呢):

3行,固定宽度200

2行,固定宽度200

无限行,固定宽度250

无限行,固定宽度250,设置段落样式

源码:

UILabel+SizeToFit.h  与  UILabel+SizeToFit.m

//
//  UILabel+SizeToFit.h
//  SizeToFit
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface UILabel (SizeToFit)

- (void)fixWidth:(CGFloat)width         // 固定宽度
        position:(CGPoint)position      // 文字起始位置
   numberOfLines:(NSInteger)lines       // 行数(如果为0则表示为无限行)
   lineBreakMode:(NSLineBreakMode)mode; // 文字断开方式

@end
//
//  UILabel+SizeToFit.m
//  SizeToFit
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import "UILabel+SizeToFit.h"

@implementation UILabel (SizeToFit)
- (void)fixWidth:(CGFloat)width
        position:(CGPoint)position
   numberOfLines:(NSInteger)lines
   lineBreakMode:(NSLineBreakMode)mode
{
    CGRect newRect     = self.frame;
    newRect.size.width = width;
    newRect.origin     = position;
    self.frame         = newRect;

    self.numberOfLines = lines;
    self.lineBreakMode = mode;
    [self sizeToFit];
}

@end

使用的源码(注,此处用到了自己写的一些源码,请君自行替换):

//
//  RootViewController.m
//  SizeToFit
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import "RootViewController.h"
#import "UILabel+SizeToFit.h"
#import "FontPool.h"

@interface RootViewController ()

@end

@implementation RootViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {

    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor blackColor];

    // 注册字体
    REGISTER_FONT(bundleFont(@"新蒂小丸子体.ttf"), @"新蒂小丸子体");

    // 设置段落样式
    NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
    style.firstLineHeadIndent = 14.f * 2;

    // 设置富文本
    NSString *testStr = @"如果我有尾巴的话 —— 说起来有点不好意思,只要和你在一起,一定会止不住摇起来的吧。";
    NSArray *array         = @[[ConfigAttributedString font:[UIFont fontWithName:CUSTOM_FONT(@"新蒂小丸子体", 0) size:12.f]
                                   range:[testStr range]],
            [ConfigAttributedString foregroundColor:[UIColor whiteColor]
                                              range:[testStr range]],
            [ConfigAttributedString paragraphStyle:style
                                             range:[testStr range]],
            [ConfigAttributedString font:[UIFont fontWithName:CUSTOM_FONT(@"新蒂小丸子体", 0) size:14.f]
                                   range:[@"如果我有尾巴的话" rangeFrom:testStr]],
            [ConfigAttributedString foregroundColor:[UIColor redColor]
                                              range:[@"如果我有尾巴的话" rangeFrom:testStr]]];

    // 创建label
    UILabel *label          = [UILabel new];

    // 设置富文本
    label.attributedText    = [testStr createAttributedStringAndConfig:array];

    // 0行,固定宽度200
    [label fixWidth:250
           position:CGPointMake(50, 100)
      numberOfLines:0
      lineBreakMode:NSLineBreakByTruncatingMiddle];

    [self.view addSubview:label];
}

@end

核心代码处:

注意,只有执行了sizeToFit才是解决问题的关键所在:

就是这么简单:)

固定UILabel宽度分行显示,布布扣,bubuko.com

时间: 2025-01-06 15:00:18

固定UILabel宽度分行显示的相关文章

固定表格宽度 超出显示...省略号

<table class="table table-hover table-responsive table-striped table-layout-fixed "> <thead class="colored-header"> <tr> <th class="text-left" width="15%">事件编号</th> <th class="t

iOS-限制UILabel宽度自适应的最大宽度

前言 一个需求,要求UILabel宽度自适应到指定宽的时候然后限制其宽度,不再需要宽度自适应 , 并且需要UILabel后面的控件紧跟其后,如下图 好的.直接进入正题 UIlabel有一个属性叫preferredMaxLayoutWidth,官方解释是: // Support for constraint-based layout (auto layout) // If nonzero, this is used when determining -intrinsicContentSize fo

table拖动(兼容Firefox 3.5/IE6),固定表格宽度

效果:可鼠标拖动td,动态修改它们的宽度 html: <html> <head> <title>table拖动(兼容Firefox 3.5/IE6),固定表格宽度</title> <meta content="charset=utf-8"> <link rel="stylesheet" href="css/22.css" /> </head> <body&g

HTML左边和右边是固定的宽度但是中间是自动的布局方式

对于这个布局方式我们可以是用绝对定位的方式来实现这个效果 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta

UILabel混色显示

效果: 源码: // // RootViewController.m // ColorLabels // // Copyright (c) 2014年 Y.X. All rights reserved. // #import "RootViewController.h" #import "YXGCD.h" @interface RootViewController () @property (nonatomic, strong) UIView *upView; @p

LaTex: 表格单元格内容 分行显示/换行

问题:如何同时让表格同一行一个单元格的文字能垂直居中?比如说文字超长超出页面范围需要分行显示 答:(来源于smth) 方案一: \newcommand{\tabincell}[2]{\begin{tabular}{@{}#[email protected]{}}#2\end{tabular}}%然后使用&\tabincell{c}{}&就可以在表格中自动换行 %比如这么用\begin{tabular}{|c|c|}\hline 1 & the first line \\\hline

02微信小程序-轮播的宽度100%显示和轮播的基础配置

1==>如何让轮播的宽度100%显示? 你先给swiper 外面添加一个大盒子,给大盒子一个类 . <view class='lunbobox'> 然后wxss 里面设置 image , width: 100%; 在设置大盒子的宽度 width: 100%; 这样就可以了. <view class='lunbobox'> <!-- 轮播开始 --> <swiper indicator-dots="{{indicatorDots}}" ci

css之让文字在一定范围内显示,不超过固定的宽度和高度

首先我们设置类如:.STYLE1 { width:150px; height:80px;color: #000000; border:1px solid #FF0000;} 解决让文字不超出CSS盒子的固定高宽我们只需要在此CSS类加入overflow:hidden;样式即可,加入后CSS类:.STYLE1 { width:150px; height:80px;color: #000000; border:1px solid #FF0000;overflow:hidden;}效果即下图: 这样一

Android 加载网络图片时 宽度固定 按等比例显示

View v = LayoutInflater.from(TourBuyDetailsActivity.this ).inflate(R.layout.tour_details_header_img_item,null); final ImageView imageView = (ImageView) v.findViewById(R.id.content_pic); ImageLoader.getInstance().displayImage(travelMode.getMedia().ima