UILabel实现自适应宽高须要注意的地方(二)

需求图以下所示
 
  1. UILabel “上期”   距离屏幕最左边 有35px
  2. UILabel “下期”   距离屏幕最右边 有35px
  3. 进行中文字在UIlabel 中间
 
图片效果以下:
 
屏幕快照 2017 03 27 上午12 16 08
 
实现思路:
 
  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 . text boundingRectWithSize : 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 . text boundingRectWithSize : 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 = [[ UIScreen mainScreen ] bounds ]. size . width ;
   
   
return [ self  contentSizeForWidth :screenWidth];
}

- (
BOOL )isTruncated
{
   
CGSize size = [ self . text boundingRectWithSize : 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文字的自适应宽度。
 
 
  屏幕快照 2017 03 27 上午12 24 56
 
如上图的  “步数”,自适应方法也同样,“步数”的UILabel 距离 屏幕最右边的距离是固定不变的,因此要用UILabel中文字自适应的方法来解决。UILabel 的X坐标会随着“步数”Label的扩大而减小,使UILabel距离屏幕右边距离固定不变。
 
 
 
图(1)具体实现:
 
    _topView = [[ UIView  alloc ] initWithFrame : CGRectMake ( 0 , 0 , SCREEN_WIDTH , 40 )];
   
_topView . backgroundColor = NF_Color_C19 ;
   
   
_topViewBigLabel = [[ UILabel alloc ] initWithFrame : CGRectMake ( 0 , 0 , 0 , 0 )];
   
_topViewBigLabel . font = [ UIFont  systemFontOfSize : Near_Final_Font_T4 ];
   
_topViewBigLabel . textColor = NF_Color_C1 ;
   
_topViewBigLabel . text = @" 进行中 " ;
    [
_topViewBigLabel sizeToFit ];
   
_topViewBigLabel . center = CGPointMake ( _topView . bounds . size . width / 2 , _topView . bounds . size . height / 2 );
    [
self . view  addSubview : _topView ];
    [
self . view  addSubview : _topViewBigLabel ];
   
   
_topViewleftLabel = [[ UILabel alloc ] init ];
   
_topViewleftLabel . font = [ UIFont  systemFontOfSize : Near_Final_Font_T9 ];
   
_topViewleftLabel . textColor = NF_Color_C1 ;
   
_topViewleftLabel . text = @" 上期 " ;
   
_topViewleftLabel . frame = CGRectMake ( 35 , 0 , 0 , 0 );
    [
_topViewleftLabel sizeToFit ];
   
_topViewleftLabel . centerY = _topView . bounds . size . height / 2 ;
    [
_topView  addSubview : _topViewleftLabel ];
   
  
   
_topViewrightLabel = [[ UILabel alloc ] 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 );
    [
_topViewrightLabel sizeToFit ];
   
_topViewrightLabel . centerY = _topView . bounds . size . height / 2 ;
    [
_topView  addSubview : _topViewrightLabel ];    
相关文章
相关标签/搜索