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

首頁 > 系統 > iOS > 正文

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

2019-10-21 18:42:59
字體:
來源:轉載
供稿:網友

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加以額外的設置,就會出現如下情況:

ios,uilabel,對齊方式,左上對齊,文字置頂

置頂前

解決辦法:我們可以通過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];}

效果圖:

ios,uilabel,對齊方式,左上對齊,文字置頂

置頂后

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

ios,uilabel,對齊方式,左上對齊,文字置頂

置頂前后frame對比

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

總結

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


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 尼玛县| 准格尔旗| 宁晋县| 舟山市| 略阳县| 商城县| 洛川县| 平罗县| 山西省| 无为县| 东丽区| 蒲江县| 榕江县| 大余县| 抚顺市| 丹东市| 威远县| 潮州市| 独山县| 昆山市| 邛崃市| 正蓝旗| 新源县| 鹤山市| 西安市| 綦江县| 深泽县| 卢龙县| 永德县| 两当县| 满城县| 湟源县| 双柏县| 章丘市| 新巴尔虎左旗| 上虞市| 甘德县| 扎囊县| 昭通市| 奇台县| 海原县|