讓UILabel的文字頂部對齊

2021-06-28 20:55:16 字數 2316 閱讀 8557

xcode中預設的uilabel是垂直居中對齊的,如果你的uilabel高度有多行,當內容少的時候,會自動垂直居中。

如下圖所示(來自stackoverflow):

比較鬱悶的是,uilabel並不提供設定其垂直對齊方式的選項。所以如果你想讓你的文字頂部對齊,那麼就需要自己想辦法了。 stackoverflow.com 上提供了幾種方法來達到頂部對齊的效果。

方法一在顯示文字時,首先計算顯示當前的文字需要多寬和多高,然後將對應的uilabel的大小改變成對應的寬度和高度。此方法的相示意圖如下:

在顯示文字時,首先計算顯示當前的文字需要多寬和多高,然後將對應的uilabel的大小改變成對應的寬度和高度。此方法的相示意圖如下:

123

4567

8

cgsize

maximumsize

=cgsizemake

(300

,9999

);nsstring

*datestring

=@"the date today is january 1st, 1999"

;uifont

*datefont=[

uifont

fontwithname:

@"helvetica"

size:

14];

cgsize

datestringsize=[

datestring

sizewithfont:

datefont

constrainedtosize:

maximumsize

linebreakmode:

self

.datelabel

.linebreakmode

];cgrect

dateframe

=cgrectmake(10

,10,300

,datestringsize

.height

);self

.datelabel

.frame

=dateframe

;

方法二

此方法更加簡單粗暴,但是很有效。其方法是在文字後面加多一些\n。 需要注意的是,\n後還得加至少乙個空格,否則多餘的\n會被uilabel忽略。從這一點上看,uilabel似乎又過於「聰明」了。

該方法的示意圖如下:

該方法的**如下:

1

2

for

(inti=

0;i<

newlinestopad;i

++)self

.text=[

self

.text

@"\n"];

方法三

最正統的方法,利用objective-c的category特性,修改uilabel的繪製**。示例**如下:

123

4567

891011

1213

1415

1617

1819

2021

2223

2425

2627

2829

// -- file: uilabel+verticalalign.h

#pragma mark verticalalign

@inte***ce

uilabel

(verticalalign)-(

void

)aligntop;-

(void

)alignbottom

;@end

// -- file: uilabel+verticalalign.m

@implementation

uilabel

(verticalalign)-(

void

)aligntop-(

void

)alignbottom

@end

我選了簡單暴力的方法二,你呢?

參考資料

如何讓UILabel字型上下對齊?

uilabel可以設定左對齊 右對齊和居中,那如何實現上下對齊呢?有幾種方案 1.簡單粗暴,在文字後面加多一些 n。但是 n後還得加至少乙個空格,否則多餘的 n會被uilabel忽略。2.自定義uilabel,重寫 void drawtextinrect cgrect rect 下面是 void d...

UIlabel 中的字型對齊

我們平時對於uilabel對齊只要設定想應的 firstlabel.frame.miny secondlabel.frame.miny 就能實現label的對齊,但是有的時候字型的大小不一樣就可能會造成 label.frame.miny,一樣,而字型由於font大小不一樣,而font 一般是居中 上...

關於設定UILabel的文字縮排

所以了解了一下關於uilabel設定文字縮排的東西。設定uilabel中文字的縮排 被 微博的內容 text retweetstatus.text text nsstring stringwithformat user.name,retweetstatus.text self.retweetcont...