国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS中UILabel設置居上對齊、居中對齊、居下對齊及文字置頂顯示

2020-07-26 02:35:11
字體:
來源:轉載
供稿:網友

iOS中UILabel設置居上對齊、居中對齊、居下對齊

在iOS中默認的UILabel中的文字在豎直方向上只能居中對齊,博主參考國外網站,從UILabel繼承了一個新類,實現了居上對齊,居中對齊,居下對齊。

具體如下:

// // myUILabel.h // // // Created by yexiaozi_007 on 3/4/13. // Copyright (c) 2013 yexiaozi_007. All rights reserved. // #import <UIKit/UIKit.h> typedef enum {  VerticalAlignmentTop = 0, // default  VerticalAlignmentMiddle,  VerticalAlignmentBottom, } VerticalAlignment; @interface myUILabel : UILabel { @private VerticalAlignment _verticalAlignment; } @property (nonatomic) VerticalAlignment verticalAlignment; @end 
// // myUILabel.m // // // Created by yexiaozi_007 on 3/4/13. // Copyright (c) 2013 yexiaozi_007. All rights reserved. // #import "myUILabel.h" @implementation myUILabel @synthesize verticalAlignment = verticalAlignment_;  - (id)initWithFrame:(CGRect)frame {  if (self = [super initWithFrame:frame]) {  self.verticalAlignment = VerticalAlignmentMiddle;  }  return self; } - (void)setVerticalAlignment:(VerticalAlignment)verticalAlignment {  verticalAlignment_ = verticalAlignment;  [self setNeedsDisplay]; } - (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines {  CGRect textRect = [super textRectForBounds:bounds limitedToNumberOfLines:numberOfLines];  switch (self.verticalAlignment) {  case VerticalAlignmentTop:   textRect.origin.y = bounds.origin.y;   break;  case VerticalAlignmentBottom:   textRect.origin.y = bounds.origin.y + bounds.size.height - textRect.size.height;   break;  case VerticalAlignmentMiddle:   // Fall through.  default:   textRect.origin.y = bounds.origin.y + (bounds.size.height - textRect.size.height) / 2.0;  }  return textRect; } -(void)drawTextInRect:(CGRect)requestedRect {  CGRect actualRect = [self textRectForBounds:requestedRect limitedToNumberOfLines:self.numberOfLines];  [super drawTextInRect:actualRect]; } @end 

在使用時:

lbl_mylabel = [[myUILabel alloc] initWithFrame:CGRectMake(20, 50, 150, 600)]; UIColor *color = [UIColor colorWithPatternImage:[UIImage imageNamed:@"halfTransparent.png"]];//使用半透明圖片作為label的背景色 lbl_mylabel.backgroundColor = color; lbl_mylabel.textAlignment = UITextAlignmentLeft; lbl_mylabel.textColor = UIColor.whiteColor; lbl_mylabel.lineBreakMode = UILineBreakModeWordWrap; lbl_mylabel.numberOfLines = 0; [lbl_mylabel setVerticalAlignment:VerticalAlignmentTop]; [self addSubview:lbl_mylabel]; 

UILabel 讓文字置頂顯示

我們經常會遇到將Label中文字置頂,也就是將文字頂到Lable框的最頂端顯示的需求,UILabel是無法對內容文字進行置頂處理的,所以,如果我們不對Label加以額外的設置,就會出現如下情況:

置頂前

解決辦法:我們可以通過sizeToFit方法解決它:

- (void)viewDidLoad { [super viewDidLoad]; UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake((self.view.bounds.size.width - 200)/2, 100, 200, 150)]; label.backgroundColor = [UIColor yellowColor]; NSString *labelText = @"我不知道如何置頂,誰來告訴我?"; [label setText:labelText]; [label setNumberOfLines:0];   //讓內容置頂 [label sizeToFit]; [self.view addSubview:label];}

效果圖:

置頂后

但是有些小伙伴會對內容置頂后的Label的frame有些顧慮,筆者也有,所以就在Label后方放置了一個和初始Label具有相同frame的紅色背景,那么如果設置sizeToFit方法后,即使Label的frame有變化,我們也可以通過和紅色背景的frame相對比而看出:

置頂前后frame對比

我們可以看到,文字內容置頂后,原Label的origin幾乎沒有變化,而bounds適應了文字,大小改變了。
所以不難看出,通過sizeToFit方法,我們可以將Label的大小“剛好”緊貼文字外部,從而實現了置頂的效果。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌兰浩特市| 田林县| 万州区| 开化县| 永胜县| 高邮市| 东台市| 南皮县| 泾阳县| 华安县| 神木县| 克东县| 四会市| 肃南| 松阳县| 永登县| 隆化县| 德惠市| 台湾省| 潜江市| 贺州市| 苍南县| 浦城县| 龙游县| 清河县| 阿克陶县| 唐河县| 繁峙县| 凤翔县| 沂源县| 车致| 福贡县| 嵊泗县| 浏阳市| 朝阳区| 二手房| 遵义县| 射洪县| 洛川县| 大田县| 通道|